• ベストアンサー

Encode.pmで「髙」(ハシゴ高)が文字化けする

Perl5.8で、EUCで保存されたテキストファイルを読み込み、Shift-JISで保存しようとしてます。 EUCからShift-JISへの変換は、Encode.pmを使用しています。 テキストファイルに「髙」(ハシゴ高 0xFCE2)や「﨑」が入っていた場合、変換されたデータは「?」(0x3F)になってしまいます。 「髙」や「﨑」をPerlを使用してEUCからShift-JISする方法はありませんでしょうか? ====================================== use Encode qw/ from_to /; open IN, "data.txt"; $data = <IN>; close IN; from_to( $data, 'euc-jp','shiftjis'); open OUT, ">data2.txt"; print OUT $data; close OUT; ====================================== 宜しくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.2

>Shift-JISの「髙」(0xFBFC ?)に変換したいのですが、どのようにすればよいのでしょうか。 ”髙”という文字は、シフトJIS上、\xEEE0と\xFBFCにマッピングされています。 EUC-jpの\xFCE2に相当するのは、領域的には\xEEE0が妥当かと思われます。 ちなみに、nkfで、コード変換すると、\xFCE2 => \xEEE0 で変換されます。 perl標準のencode.pmでがんばるなら、Encode::FB_XMLCREFを使った上で 気に入らない部分を後から、自前コーディングで、気に入るように加工するしか ないかと思います。

ps5550
質問者

お礼

ありがとうございます。 お礼が遅くなってすみません。 jcode.plでも、\xFCE2 => \xEEE0 で変換されました。 特にEncode.pmを使う理由も無いので、jcode.plを使うことにします。

その他の回答 (1)

  • wolfwood
  • ベストアンサー率50% (199/398)
回答No.1

下記のサイトが参考になるかと思います。 http://www.kawa.net/works/jcode/uni-escape.html ちなみに「髙 Perl」のキーワードでYahoo検索してHITした最初のサイトです。 検索を有効利用すればすぐに分かることもあるのでちょっと試してみては如何でしょうか。

参考URL:
http://www.kawa.net/works/jcode/uni-escape.html
ps5550
質問者

補足

ありがとうございます。 教えていただいたサイトは、すでに見ていますが、それでも分からなかったので、ここに質問しました。 すみません、そのことを書いてなかったですね。ごめんなさい。 教えていただいたサイトのようにすると、以下のような結果になります。 from_to( $data, 'euc-jp','shiftjis', Encode::FB_XMLCREF ); 【結果】(テキストファイル) &#x90c4; Shift-JISの「髙」(0xFBFC ?)に変換したいのですが、どのようにすればよいのでしょうか。