http://perldoc.jp/docs/modules/MIME-Base64-2.12/Base64.pod
名前
MIME::Base64 - base64文字列のエンコードとデコード
概要
use MIME::Base64; $encoded = encode_base64('Aladdin:open sesame'); $decoded = decode_base64($encoded);
説明
このモジュールは RFC 2045 - MIME (Multipurpose Internet Mail Extensions) の中で 定義されている Base64エンコード方式への文字列のエンコードとデコードを行なう関数を 提供するモジュールです。Base64エンコード方式は人間の目に見えない、フォーム中の 任意のオクテット列を表現するのにデザインされています。65文字のUS-ASCIIのサブセット ([A-Za-z0-9+/=])が使われ、1つの表示可能な文字に6ビットが割り当てられます。
以下の関数が提供されています:
encode_base64($str, [$eol]) encode_base64() 関数を呼び出す事によってデータをエンコードします。 最初の引数はエンコードされる文字列です。2番目の引数はシーケンスを終了する時に 使われる文字です(これはオプションで、デフォルトは"?n"です)。 返されるエンコードされた文字列は76文字を越えないように分割され、 空文字列でなければ$eolが最後に付きます。もしエンコードされた文字列を 複数の行に分割したくない場合は、2番目の引数として空白の文字列を渡してください。
decode_base64($str) decode_base64() 関数を呼び出す事によってデータをデコードします。 この関数はデコードする文字列である単独の引数をとり、デコードしたデータを 返します。
65文字のbase64サブセットの中にない文字は、単に無視されます。 埋め込み文字'='の後ろは決してデコードされません。
もしデコードする文字列の長さが(base64文字以外を無視した後) 4の整数倍数ではないか、埋め込み文字があまりにも早く見付かったならば、 perl が -wで動作していると警告が表示されます。
これらの関数をあなたの名前空間にインポートすることを好ましく 思わないのであれば、以下のように呼ぶことが出来ます:
use MIME::Base64 (); $encoded = MIME::Base64::encode($decoded); $decoded = MIME::Base64::decode($encoded);
診断
perlを-wスイッチを付けて起動すると、以下の警告は表示されるかも しれません:
Premature end of base64 data (訳注:Premature end of base64 data=base64データの終了が早すぎます)
デコードする文字の数が4の倍数ではありません。正しいbase64データは 長さが4の整数倍になるよう、1つまたは2つの"="文字で調整すべきです。 デコードの結果は、 埋め込み文字がそこに存在するような形で 行なわれます。
Premature padding of base64 data (訳注:base64データの埋め込み文字が早すぎます)
埋め込み文字'='が、base64の4文字の組での先頭または2番目として 存在します。
使用例
もしも大きなファイルをエンコードしたいのであれば、57バイトの固まりで エンコードすべきです。これはbase64の行を確保し、中間の行が埋め込み文字で 終わらないことを確実にします。57バイトのデータは1行の完全なbase64行 (76 == 57*4/3)になります:
use MIME::Base64 qw(encode_base64); open(FILE, "/var/log/wtmp") or die "$!"; while (read(FILE, $buf, 60*57)) { print encode_base64($buf); }
あるいは十分なメモリがあれば
use MIME::Base64 qw(encode_base64); local($/) = undef; # slurp print encode_base64(<STDIN>);
コマンド行からの同じアプローチは以下の通りです:
perl -MMIME::Base64 -0777 -ne 'print encode_base64($_)' <file
すべての行にbase64文字が4の倍数入っていれば、デコードはslurpモードを 必要としません:
perl -MMIME::Base64 -ne 'print decode_base64($_)' <file
著作権(=COPYRIGHT)
Copyright 1995-1999, 2001 Gisle Aas.
This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself.
Distantly based on LWP::Base64 written by Martijn Koster <m.koster@nexor.co.uk> and Joerg Reichelt <j.reichelt@nexor.co.uk> and code posted to comp.lang.perl <3pd2lp$6gf@wsinti07.win.tue.nl> by Hans Mulder <hansm@wsinti07.win.tue.nl>
The XS implementation use code from metamail. Copyright 1991 Bell Communications Research, Inc. (Bellcore)
参考訳(後半のみ): Martijn Koster<m.koster@nexor.co.uk> と Joerg Reichelt <j.reichelt@nexor.co.uk>によって書かれたLWP::Base64、 そしてHans Mulder <hansm@wsinti07.win.tue.nl>により comp.lang.perl <3pd2lp$6gf@wsinti07.win.tue.nl>にポストされたコードを 少しだけベースにしています。
XSの実装はmetamailのコードを使っています。 Copyright 1991 Bell Communications Research, Inc. (Bellcore)
翻訳者
川合孝典 (GCD00051@nifty.ne.jp)