MIME-Base64-2.12 > MIME::Base64

名前

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)