Kawanet Blog II

アクセスカウンタ

zoom RSS [Perl] 2つのシグマ 03A3/2211

<<   作成日時 : 2006/02/02 03:23   >>

ブログ気持玉 0 / トラックバック 0 / コメント 0

シグマの文字には以下の2種類のコードがあるそうです。
Unicode 03A3 (GREEK CAPITAL LETTER SIGMA)
JIS 2632
EUC-JP A6B2
Shift_JIS 83B0
Unicode 2211 (N-ARY SUMMATION)
JIS 2D74
EUC-JP ADF4
Shift_JIS 8794 (CP932)

手元の 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
ウェブリブログで技術系のページは、珍しいですね!
(ありがとうございました。>森山さん)
 
 

テーマ

関連テーマ 一覧


月別リンク

ブログ気持玉

クリックして気持ちを伝えよう!
ログインしてクリックすれば、自分のブログへのリンクが付きます。
→ログインへ

トラックバック(0件)

タイトル (本文) ブログ名/日時

トラックバック用URL help


自分のブログにトラックバック記事作成(会員用) help

タイトル
本 文

コメント(0件)

内 容 ニックネーム/日時

コメントする help

ニックネーム
本 文
[Perl] 2つのシグマ 03A3/2211 Kawanet Blog II/BIGLOBEウェブリブログ
文字サイズ:       閉じる