シグマの文字には以下の2種類のコードがあるそうです。Unicode 03A3 (GREEK CAPITAL LETTER SIGMA)と Unicode 2211 (N-ARY SUMMATION) 手元の Mac OS X (Perl 5.8.6 + Encode 2.08)で試すと、 ↑の前者は EUC-JP→UTF8 の変換ができるけど、 後者は EUC-JP→UTF8 の変換ができませんでした。 EUC-JP→utf8 や Shift_JIS→utf8 では、\xEF\xBD\xBD になります。(FFFD) ただし、後者でも CP932→utf8 については変換できました。(Shift_JIS≠CP932) 原因としては、Encode.pm の内蔵する JIS&EUC のテーブルに 2211 が入っておらず、 CP932 のテーブルには 2211 が入っているためと思われます。 UTF8 に変換できなかった文字は \xEF\xBD\xBD (\x{FFFD}) になるので、 消極的な対策としては、コード変換した後で s/\x{FFFD}/?/g のように置換するとか。 Jcode.pm のMLで聞いたところ、Encode::EUCJPMS モジュールを教えてもらいました。 http://search.cpan.org/~naruse/Encode-EUCJPMS/ Encode.pm 標準の EUC-JP のテーブルでは 2211 に対応していないが、 Encode::EUCJPMS モジュールの eucJP-ms のテーブルでは 2211 に対応しています。 perl -MEncode::EUCJPMS -MEncode -e 'my $str = "\xA6\xB2\xAD\xF4\n"; Encode::from_to($str,"eucJP-ms","utf8"); print $str;'または、↓でも同じです。 perl -MEncode::EUCJPMS -MEncode -e 'print decode("eucJP-ms","\xA6\xB2\xAD\xF4\n");' とすると、UTF8 で正しく2つのシグマが出力されました。 先達のお陰で、最低限の変更量で済んで、助かりました。 有難いことであります。 eucJP-ms と cp51932 の違いは、↓のページを参照のこと。 http://msyk.at.webry.info/200511/article_2.html ウェブリブログで技術系のページは、珍しいですね! (ありがとうございました。>森山さん) |
| << 前記事(2006/02/01) | トップへ | 後記事(2006/02/04)>> |
| タイトル (本文) | ブログ名/日時 |
|---|
| 内 容 | ニックネーム/日時 |
|---|
| << 前記事(2006/02/01) | トップへ | 後記事(2006/02/04)>> |