« test | メイン | Data::Dumper »

September 21, 2003

perl のバージョンと文字コード

perl で文字コード変換したければ,5.8 以降では Encode を,5.6以前ではJcodeを,というふうに使い分けないといけないらしい.5.6以前ではEncode は標準ライブラリではない.5.8以降でもJcode は使えるが,Encode を使用したほうが無難.

perl の有名な文字コード変換モジュールに, Jcodeがある.この Jcode は,perl 5.8 以降では,Encodeモジュールとして,perlの標準ライブラリに入っている.

5.8以降でもJcode は使える.なので,いろいろなバージョンのperlで動くようなプログラムをつくりたければ,Jcode を使うようにすれば良い,,,,と思っていた.しかし,どうやら考えを改めなければならないらしい.

理由は,5.8 で Jcode を使用して EUC-JP → UTF-8 の変換を行うと,チルダ「~」が文字化けしてしまうこと.不思議なことに,経験した範囲では,他の文字は正常に変換される.Encode を使うと,チルダもちゃんと変換される.

では,一つのプログラムで,5.005 でも 5.6 でも 5.8 でも動かしたい場合はどうすればいいかというと,perl 5.8 以上ならEncodeを,5.6以前ならJcode を使うように条件分岐すればよい.具体的には,バージョン変数 $] を見たり,eval {require Encode}; などとしてエラーが出るかどうかを調べればよい.

投稿者 msano : September 21, 2003 05:19 PM

トラックバック

このエントリーのトラックバックURL:
http://www.semblog.org/mt3/mt-tb.cgi/83

コメント

投稿者 aaa : November 18, 2003 04:44 PM

Hi from Victor Yolande cool amazing this page

投稿者 Worlds biggest tits : June 6, 2004 05:57 AM

コメントしてください




保存しますか?