Encode.pm
Perl5.8ではEncode.pmという巨大な文字コード変換ライブラリが入っています。しかし、日本語の変換に際しては、さまざまな問題があります。
まずEUC-JPへと変換する場合の問題の回避策は以下の通り。
Encode($str, 'utf-8', 'EUC-JP', Encode::FB_HTMLCREF); $str =~ s/∥/‖/go; $str =~ s/~/〜/go; $str =~ s/-/−/go; $str =~ s/¢/¢/go; $str =~ s/£/£/go; $str =~ s/¬/¬/go; $str =~ s/¦/釗/go; $str =~ s/Ⅰ/Ⅰ/go; $str =~ s/Ⅱ/Ⅱ/go; $str =~ s/Ⅲ/Ⅲ/go; $str =~ s/Ⅳ/Ⅳ/go; $str =~ s/Ⅴ/Ⅴ/go; $str =~ s/Ⅵ/Ⅵ/go; $str =~ s/Ⅶ/Ⅶ/go; $str =~ s/Ⅷ/Ⅷ/go; $str =~ s/Ⅸ/Ⅸ/go; $str =~ s/Ⅹ/Ⅹ/go; $str =~ s/\x8f\xa2\xf1/№/go; $str =~ s/℡/℡/go; $str =~ s/㈱/㈱/go;
なお、Unicode系からShift_JISに変換したい時は、CP932を指定してやれば問題は起こらりません・・・が、EUC-JPからの場合は問題が起きるので、以下のように回避します。
Encode($str, 'EUC-JP', 'CP932', Encode::FB_HTMLCREF); $str =~ s/‖/‖/go; $str =~ s/〜/〜/go; $str =~ s/−/−/go; $str =~ s/\xfb\xbb/釗/go;