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