アプリ版:「スタンプのみでお礼する」機能のリリースについて

初めて投稿させていただきます。

Perlで半角カタカナをひらがなに変換しているのですが、
以下のような文字列は文字化けが起こってしまいます。

オウシュウシ
イイオカ
コシオウ
アカサカ
キョウサカエ
オオスケ 
オオキシ
キキョウ
ソウカシ

なんとなく法則がありそうなのですが、それがどういう理由なのかがわかりません。

たとえば、「アカサカ」は「鐔縁酋鐔誌酋」と化けてしまいます。
しかし、「アカサカチョウ」とした場合は化けません。

以下のようなコードを作成しています。

use Encode;
use Jcode;

$iline="文字列";
Encode::from_to( $iline, 'CP932', 'utf8');
my $str = Jcode->new($iline)->h2z->tr("ァ-ン", "ぁ-ん")->utf8;
$strをファイルに出力

といった感じです。

文字コードの関係が弱いので、何をどうしたら良いのか検討がつきません。
何か参考になることを教えていただければ幸いです。

Perlのバージョン5.8.5
サーバー Linux系

A 回答 (2件)

Jcode使っているので、Encode::from_to は不要です。

それよりも、コンストラクタに$ilineの文字コードを渡していないため、文字コードの自動認識が動いてしまうのが問題です。自動認識は長い文章には有効ですが、単文には無効だと思った方が安全です。

my $str = Jcode->new($iline, 'CP932')->h2z->tr("ァ-ン", "ぁ-ん")->utf8;

とすべきでしょう。
    • good
    • 0

Jcode.pm は、


EUCの文字コードの半角カタカナを全角カタカナにしてるみたいです。

なので
# utf8->EUC-JP
Encode::from_to( $iline, 'CP932', 'EUC-JP');
にしてみてください。

参考URL:http://d.hatena.ne.jp/dayflower/20060530/1148951 …
    • good
    • 0
この回答へのお礼

ありがとうございます!

最終的にはUTF-8にしたかったので、

Encode::from_to( $iline, 'CP932', 'EUC-JP');
$iline = Jcode->new($iline)->h2z->tr("ァ-ン", "ぁ-ん")->utf8;

と修正して、文字化けがないことを確認いたしました。

ありがとうございました。

お礼日時:2007/06/08 12:36

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!