nkf でbase64 エンコード，デコードしたら結果が違う?

小さなバイナリを受け渡ししたいけれどファイル共有サービスとか使うのも面倒だしbase64 にしてgist に貼ってしまおうと思ったのですが，nkf コマンドでbase64 にエンコードして，確認のためデコードしてみたら違う結果に．

% cat original | nkf -MB > hoge
% cat hoge | nkf -mB > fuga
% diff original fuga
バイナリーファイル original とfuga は異なります
% ls -l
-rw-r--r-- 1 mk mk 4080 5月 29 20:38 original
-rw-r--r-- 1 mk mk 5422 5月 29 20:52 hoge
-rw-r--r-- 1 mk mk 3999 5月 29 20:52 fuga

Google+ にこのことを書いたら
https://plus.google.com/u/0/103792214056489833385/posts/bbVzNS7RNTR

Masakazu Takahashiさんにコメントをいただきました．

試したところ、デコードのときに入力文字コードを明示的に指定する必要があるようです。

% nkf -mBW hoge > fuga

そんなこんなで、base64のエンコード/デコードだけなら、base64コマンドのほうが確実かも。

ということで，base64 コマンドならGNU Coreutils に含まれているので大抵の環境で使えるしってことでbase64 コマンドで貼り付けました．

% cat jl-bct.bct | xz | base64 | gist-paste

ついでに復元はこんな感じで

% wget -O – https://gist.github.com/matoken/b2041569865a82895082/raw/53b85e9333e3b837d24714a8e529dde69ec788e9/jl-bct.bct.xz.base64 | base64 -d | xzcat > jl-bct.bct