[Tokyo-pm] Jcode/Encodeでの機種依存文字

Dan Kogai dankogai @ dan.co.jp
2005年 5月 16日 (月) 23:18:16 PDT


弾です。

On May 17, 2005, at 14:04, <h-taguchi at secom.co.jp> wrote:
> 弾さん、お久しぶりです。
>
> Jcode-2.00がCPANにアップされたのを知りメールする
> ことにしました。
>
> 以前、同じ内容のメールを弾さん宛てにだしたのですが、
> 返事がこなったので、このMLに送信します。

あれ?出したような記憶もおぼろげに....いずれにせよ対応がsloppyだった点はお詫びします。

> で、表題の件ですが、私はテッキリ、最近のEncodeモジュールでは、
> 13区の特殊文字、
> NEC選定IBM拡張文字、
> IBM拡張文字
> についても対応しているものとばかり思っていました。
> 「最近のPerlはCPANモジュール入れなくても、これらの文字コード変換できる」
> と周りに言ってしまい、焦ってます。

これの問題は、cp932ではなく、euc-jpの方にあります。

> やりたいのは、特殊文字やIBM拡張文字を含むSJISのファイルを
> EUCのファイルに変換したり、その逆だったりです。

この拡張文字、cp932 の方にはあっても euc-jp の方にはありません。そのことは

> 下の実行は、少し前の実行結果ですが、今でも機種依存文字は
> 非対応に思えますが、これは何とかならないのでしょうか?
> これができないと、ずっとNKF.pmを使い続けないと行けないです。
>
> C:\@ai\#Perl_test\SJIS2EUC>TestEncode_cp932_1.pl SJIS.txt > EUC.txt
> "\x{2460}" does not map to euc-jp at C:/Perl/lib/Encode.pm line 186, 
> <> line 2.

これでも明らかです。こういう場合は、例えば

my $euc_with_vendor_maps = encode('euc-jp', $utf8, Encode::FB_XMLCREF);

とかして、うまくfallbackを使うという解決法が一番いいのではないでしょうか?これであれば、旗手依存文字は 
"&#x2460;"となり、ブラウザなどではきちんと表示されますし。FB_PERLQQだと 
"\x{2460}"となり、そのままperlに食わせられます。

以上取り急ぎ

Dan the (J|En)code Maintainer




Tokyo-pm メーリングリストの案内