use MIME::Charset: $charset = MIME::Charset->new("euc-jp");
キャラクタセット情報の取得:
$benc = $charset->body_encoding; # 例 "Q" $cset = $charset->as_string; # 例 "US-ASCII" $henc = $charset->header_encoding; # 例 "S" $cset = $charset->output_charset; # 例 "ISO-2022-JP"
テキストデータの変換:
($text, $charset, $encoding) = $charset->header_encode( "\xc9\xc2\xc5\xaa\xc0\xde\xc3\xef\xc5\xaa". "\xc7\xd1\xca\xaa\xbd\xd0\xce\xcf\xb4\xef", Charset => 'euc-jp'); # ...例えば (<変換ずみ文字列>, "ISO-2022-JP", "B") を返す。 ($text, $charset, $encoding) = $charset->body_encode( "Collectioneur path\xe9tiquement ", Charset => 'latin1'); # ...例えば (<元の文字列>, "ISO-8859-1", "QUOTED-PRINTABLE") を返す。 $len = $charset->encoded_header_len( "Perl\xe8\xa8\x80\xe8\xaa\x9e", Charset => "utf-8", Encoding => "b"); # ...例えば 28 を返す。
モジュール既定値の操作:
MIME::Charset::alias("csEUCKR", "euc-kr"); MIME::Charset::default("iso-8859-1"); MIME::Charset::fallback("us-ascii");
非OO関数 (近い将来に廃止):
use MIME::Charset qw(:info); $benc = body_encoding("iso-8859-2"); # "Q" $cset = canonical_charset("ANSI X3.4-1968"); # "US-ASCII" $henc = header_encoding("utf-8"); # "S" $cset = output_charset("shift_jis"); # "ISO-2022-JP" use MIME::Charset qw(:trans); ($text, $charset, $encoding) = header_encode( "\xc9\xc2\xc5\xaa\xc0\xde\xc3\xef\xc5\xaa". "\xc7\xd1\xca\xaa\xbd\xd0\xce\xcf\xb4\xef", "euc-jp"); # ...(<変換されたテキスト>, "ISO-2022-JP", "B") を返す。 ($text, $charset, $encoding) = body_encode( "Collectioneur path\xe9tiquement ". "\xe9clectique de d\xe9chets", "latin1"); # ...(<元のテキスト>, "ISO-8859-1", "QUOTED-PRINTABLE") を返す。 $len = encoded_header_len( "Perl\xe8\xa8\x80\xe8\xaa\x9e", "b", "utf-8"); # 28
エンコーディング とは、MIME でのそれのことで、 メッセージ本体やメッセージヘッダ本体を印字可能な US-ASCII 文字の列として表現する方法を指す。
OPTS には次の対を指定できる。 NOTE: Unicode/マルチバイト対応が有効になっていないとき (``USE_ENCODE'' 参照) は、 変換を行わないので、次のオプションは効果を持たない。
返値は "B" (BASE64)、"Q" (QUOTED-PRINTABLE)、"S" (どちらか短いほう)、 "undef" (伝送エンコードしなくてよい --- 7BIT か 8BIT) のいずれか。これはメッセージヘッダのエンコーディングとは違うこともある。
CHARSET 引数を指定した場合、$charset オブジェクトの符号化器 (および出力キャラクタセット名) を、CHARSET のそれに置き換える。 つまり、$charset オブジェクトは元のキャラクタセットから新たな CHARSET への変換器となる。
返値は "B"、"Q"、"S" (どちらか短くなるほう)、 "undef" (エンコードしなくてよい) のいずれか。これはメッセージ本体のエンコーディングとは違うこともある。
Unicode/マルチバイト対応が有効になっていないとき (``USE_ENCODE'' 参照) は、 この関数は単に ``canonical_charset'' の結果を返す。
OPTS には以下の対を指定できる。 NOTE: Unicode/マルチバイト対応が有効になっていないとき (``USE_ENCODE'' 参照) は、 変換を行わないので、以下のオプションは効果を持たない。
3要素のリスト (変換ずみの文字列, 出力のキャラクタセット, 伝送エンコーディング) が返る。 伝送エンコーディング は "BASE64"、"QUOTED-PRINTABLE"、 "7BIT"、"8BIT" のいずれか。出力のキャラクタセット が決定できず、 変換ずみの文字列 が ASCII以外のバイトを含むときは、 出力のキャラクタセット は "undef"、伝送エンコーディング は "BASE64" となる。 出力のキャラクタセット が "US-ASCII" となるのは、文字列が ASCII以外のバイトを含まないときに限る。
NOTE: Unicode/マルチバイト対応が有効になっていないとき (``USE_ENCODE'' 参照) は、 この機能を実行すると死ぬ。
NOTE: Unicode/マルチバイト対応が有効になっていないとき (``USE_ENCODE'' 参照) は、 この機能を実行すると死ぬ。
ENCODING は "B"、"Q"、"S" ("B" と "Q" のうち短くなるほう) のいずれか。
OPTS には以下の対を指定できる。 NOTE: Unicode/マルチバイト対応が有効になっていないとき (``USE_ENCODE'' 参照) は、 変換を行わないので、以下のオプションは効果を持たない。
3要素のリスト (変換ずみの文字列, 出力のキャラクタセット, エンコーディング法) が返る。 エンコーディング法 は "B"、"Q"、"undef" (エンコードしなくてよい) のいずれか。 出力のキャラクタセット が決定できず、変換ずみの文字列 が ASCII以外のバイトを含むときは、出力のキャラクタセット は "8BIT" (これはキャラクタセットの名前ではなく、符号化が不可能なデータを表す特殊値) で エンコーディング法 は "undef" (エンコードするべきではない) となる。 出力のキャラクタセット が "US-ASCII" となるのは、文字列が ASCII以外のバイトを含まないときに限る。
NOTE: Unicode/マルチバイト対応が有効になっていないとき (``USE_ENCODE'' 参照) は、 この機能を実行すると死ぬ。
CHARSET があって偽でないとき、ALIAS が CHARSET の別名に登録される。 さもなければ、別名に変更はない。いずれの場合でも、 現在 ALIAS が登録されているキャラクタセットを返す。
既定キャラクタセットとは、 当モジュールで、処理のためのキャラクタセットが不明なときに用いるキャラクタセット。 当モジュールを利用するモジュールでは、 処理のためのキャラクタセットが不明なときや暗黙の既定値が必要なとき、 このキャラクタセットを使うことを推奨する。 これは既定では "US-ASCII"。
CHARSET があって偽でなければ、それを既定キャラクタセットに設定する。 さもなければ、既定キャラクタセットは変わらない。いずれの場合でも、 現在の既定キャラクタセットを返す。
NOTE: 既定キャラクタセットは変更するべきではない。
予備キャラクタセットとは、 当モジュールで、指定されたキャラクタセットでの変換が失敗し、 エラー処理法に "FALLBACK" が指定されていたときに用いるキャラクタセット。 当モジュールを利用するモジュールでは、 キャラクタセット変換が失敗するときに最終手段としてこのキャラクタセットを使ってもよい。 これは既定では "UTF-8"。
CHARSET があって偽でなければ、それを予備キャラクタセットに設定する。 CHARSET が "NONE" であれば、予備キャラクタセットを未定にする。 さもなければ、予備キャラクタセットは変わらない。いずれの場合でも、 現在の予備キャラクタセットを返す。
NOTE: 予備キャラクタセットに "US-ASCII" を指定する価値はある。 変換の結果は、キャラクタセット情報がないときも可読となる。
必須でない引数があってそのどれかが偽でなければ、 その引数で CHARSET の特性を設定する。さもなければ、特性は変わらない。 いずれの場合でも、CHARSET の現在の特性を 3 要素のリスト (HEADERENC, BODYENC, ENCCHARSET) として返す。
HEADERENC はメッセージヘッダで推奨されるエンコーディング法。 "B"、"Q"、"S" (どちらか短くなるほう)、 "undef" (エンコードしなくてよい) を指定できる。
BODYENC はメッセージ本体で推奨される伝送エンコーディング。 "B"、"Q"、"S" (どちらか短くなるほう)、"undef" (伝送エンコードしなくてよい) を指定できる。
ENCCHARSET は、指定した CHARSET と互換で、インターネット上の MIME メッセージで使うことを推奨されるキャラクタセット名。 変換が必要ない (または当モジュールが適当なキャラクタセットを知らない) ときは、 ENCCHARSET は "undef"。
NOTE: この関数の今後の版では、ほかにも必須でない引数をとれるようになるかもしれない (たとえば、文字幅、行分割の挙動などについての属性)。 そのため、返値の形式も変わるかもしれない。個々の特性を取得するには ``header_encoding''、``body_encoding''、``output_charset'' を使ってほしい。
エラー処理法が指定されないか、上記以外のエラー処理法が指定されたときは、 "DEFAULT" とみなす。
このモジュールの開発版が <http://hatuka.nezumi.nu/repos/MIME-Charset/> にある。