Encode561.pm - Encode::from_to compatible for Perl 5.6.x and 5.005
use Encode561; my $text = "Hello, World!\n"; Encode561::from_to( $text, "utf8", "cp932" ); print $text;
Encode.pm は日本語だけでなく多言語の変換に有用ですが、 Perl 5.8.x 以降でしか利用できません。 しかし、サーバ運用上、どうしても Perl 5.005 や Perl 5.6.x といった 古いバージョンのまま稼動してるマシンも多いと思います。
Jcode.pm や Unicode::Map でも組み合わせることで Encode.pm と同等の処理も実現できまうが、 インターフェースが異なるため、プログラムが複雑になってしまいます。
Encode561.pm は、Encode::from_to 関数と同等の処理を行う関数 Encode561::from_to 関数を提供します。
Perl 5.005 および 5.6.x のサーバ上で Encode561.pm を利用して 開発したプログラムを、Perl 5.8.x のサーバで本来の Encode.pm を 利用して稼動させることが可能になります。
また、Perl 5.8.x 上でも Encode561.pm を利用することも可能です。 しかし、Encode.pm 本体を利用したほうが処理も速いでしょうから、 プログラム中の『Encode561』を『Encode』と書き換えたほうがいいかと 思われます。
from_to 関数の引数の書式は、Encode.pm のそれと同じです。
[$length =] Encode561::from_to($octets, FROM_ENC, TO_ENC [, CHECK])
$octets
には、変換したい文字列を指定します。 FROM_ENC
には、変換前の現在の文字コードを指定します。 TO_ENC
には、変換先の文字コードを指定します。
第4引数(CHECK)は、指定されていても無視されます。 $length
は、変換後のバイト数が返ります。
Encode561.pm では下記の文字コードを利用できます。
・内蔵ルーチンにより対応するコード:
UTF-8 Latin1 (ISO-8859-1,ASCII)
・Jcode.pm により対応するコード:
Shift_JIS (CP932) EUC_JP (x-euc-jp) JIS (ISO-2022-JP)
・Unicode::Map により対応する主なコード:
EUC-KR (CP949) GB2312 (CP936) BIG5 (CP950)
※その他、Unicode::Map がサポートするコードは基本的に利用できます。 Shift_JIS と CP932 の文字セット定義は本来異なりますが、簡便のため、 同一視しています。(Jcode.pm における sjis として処理します)
・対応しないコード:
UCS2 UTF-16
※Encode561.pm では、16bitコードには対応しません。 8bitコードまたは8bit×可変長コードのみ対応しています。
Jcode.pm および Unicode::Map では、Unicode から他のコードに変換時に 出力先文字セットで表現できない文字は「??」や「〓」に変換されたり、 削除されてしまいます。 Encode.pm ではそれを回避する Encode::FB_XMLCREF オプションがあります。 Jcode.pm および Unicode::Map で FB_XMLCREF 相当の機能を実現する パッチプログラム(↓下記)を予め適用しておくことをお勧めします。 http://www.kawa.net/works/jcode/uni-escape.html 該当文字を &#xHHHH; の形式にエスケープすることで、文字化けを防ぎます。
Encode561.pm を用いることで Encode.pm がない環境(=5.6.1以下)でも Encode.pm に近い処理を実現できますが、しかし反面、 Jcode.pm または Unicode::Map は必須となってしまいます。 レンタルサーバ等でモジュールを追加インストールできず、 jcode.pl しか利用できない環境においても Shift_JIS〜EUC-JP〜ISO-2022-JP 間の変換に限れば 利用できるように拡張するのも、需要があるかもしれませんね。
Copyright 2004 Kawasaki Yusuke <u-suke [at] kawa.net> http://www.kawa.net/