有一個奇怪紅寶石編碼遭遇:紅寶石BASE64編碼/解碼/解壓縮(「M」)困擾
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
知道爲什麼這不是對稱!?爲什麼'm0'(decode64_strict)根本不起作用?輸入字符串被填充爲base64字母表中4個字符的倍數。這裏是14×6位= 84位,它是10 1/2 8位字節,即11個字節。但解碼後的字符串似乎放棄了最後一個nybble?
我錯過了一些明顯的東西,或者這是一個錯誤?解決方法? 比較http://www.ietf.org/rfc/rfc4648.txt