Message::* Perl modules の文字コードの扱い

手っ取り早く日本語が使えるようにする方法

日本語文字コード変換に良く使われる、 jcode.plJcode.pm, NKF.pm などを使うための定義モジュールを用意しています。これを次の例のように use するだけで使えます。

## どちらか好きな方をどうぞ。
use Message::MIME::Charset::Jcode 'Jcode';	## 'Jcode.pm' と書いても良い。
use Message::MIME::Charset::Jcode 'jcode.pl';

jcode.pl や Jcode.pm などは、自動的に require/use されます。

ちなみに、複数回 Message::MIME::Charset::Jcode を読み込んだ場合には最後の定義が有効になります。また、 (当然といえば当然ですが) そのモジュールで利用可能な charset のみ定義されます。ですから、上の例の通りの順番で書いておくことで、 UTF-8 は Jcode.pm で、それ以外の場合は jcode.pl で変換が行われます。

なお、内部文字コード (メソッドなどで値を取り出した時の符号化方式) は、変換モジュールの内部コードまたは日本語 EUC になります。 (jcode.pl や Jcode.pm では日本語 EUC です。) これを変更するには、 $Message::MIME::Charset::Jcode::CODE{internal}'sjis''jis' (7ビット ISO/IEC 2022) などにして下さい。

Charset の定義

既定の状態では、本文や quoted-string などの部分について、文字コードに関係する変換処理は行われません。 Perl のファイル入出力などがそうであるように、単なる8ビットのオクテット列として扱います。

文字コードの変換処理 (メッセージの符号化文字集合から script 内部の符号化文字集合への変換と、その逆) を定義するには、 Message::MIME::Charset::make_charset を使います。利用例は Message::MIME::Charset::Jcode を見て下さい。

*default は特別な charset で、 MIME などで charset が指定されていない、 quoted-string の変換処理を定義します。 (なお、一般に charset 名は、 Message::* 各モジュールでは小文字に正規化した状態で処理しますから、こうした charset 定義は小文字で行います。)

この charset 定義は、当然、当該処理が呼び出される前に行っておく必要があります。 Message::Entity->parse などする前に 定義しておくと良いでしょう。

Charset 定義の name_minimumizer 属性は、名前最小化の関数を指定します。 MIME によると charset 名は、使用されている文字の範囲の最小公倍数的なものにする必要があります。 (例えば、基本ラテン文字のみからなる ISO-2022-JP は、名前を最小化して US-ASCII としなければなりません。)

なお、 ISO-2022-JP など幾つかの charset 用には Message::MIME::Charset で組み込み定義されていますので、改めて指定する必要はありません。

将来計画

$Date: 2002/07/13 11:51:56 $