Avoir une étrange rencontre d'encodage rubis:rubis base64 encode/decode/déballer ('m') trouble
ruby-1.9.2-p180 :618 > s = "a8dnsjg8aiw8jq".ljust(16,'=')
=> "a8dnsjg8aiw8jq=="
ruby-1.9.2-p180 :619 > s.size
=> 16
ruby-1.9.2-p180 :620 > s.unpack('m0')
ArgumentError: invalid base64
from (irb):631:in `unpack'
ruby-1.9.2-p180 :621 > s.unpack('m')
=> ["k\xC7g\xB28<j,<\x8E"]
ruby-1.9.2-p180 :622 > s.unpack('m').first.size
=> 10
ruby-1.9.2-p180 :623 > s.unpack('m').pack('m')
=> "a8dnsjg8aiw8jg==\n"
ruby-1.9.2-p180 :624 > s.unpack('m').pack('m') == s
=> false
Toute idée pourquoi ce n'est pas symétrique !? Et pourquoi 'm0' (decode64_strict) ne fonctionne pas du tout? La chaîne d'entrée est complétée par un multiple de 4 caractères dans l'alphabet base64. Ici, il s'agit de 14 x 6 bits = 84 bits, ce qui représente 10 octets de 8 bits, c'est-à-dire 11 octets. Mais la chaîne décodée semble laisser tomber le dernier nybble?
Ai-je manqué quelque chose d'évident ou est-ce un bug? Solution de contournement? cf. http://www.ietf.org/rfc/rfc4648.txt