On Sun Jan 25 07:35:58 2015, moritz wrote: > <moritz> m: say 'ö'.encode('ASCII') > <camelia> rakudo-moar 7e8d8a: OUTPUT«Blob[uint8]:0x<3f>» > <moritz> that looks like a bug to me > > Since ö isn't representable as ASCII, this should throw an exception. > Currently it encodes to 0x37, which is the question mark / replacement > character. Since using a replacmement character silently loses > information, which is a dangerous default. > > Here is my wish list: > > 1) the default is to throw an exception, let's say > > X::Str::NotEncodable.new( > source => 'ö', > index => '0', > destination => 'ASII', > ); > > 2) if a replacment is desired, indicate that through an adverb in the > .encode call, either > > 'ö'.encode('ASCII', :replacement) > > to get the default, or > > 'ö'.encode('ASCII'. :replacement(Buf.new(42))) > > to be able to chose a replacement byte or byte sequence. > > If somebody implements it, I'll add it to the design docs :-) >
The default is now to throw an exception (not typed for now), and the replacement functionality is available (though you specify it as a string, to ensure you can't replace with something that is bogus in the target encoding). ilmari++ for working on this; I'm just closing the ticket! Tests in S32-str/encode.t. /jnthn