BLOGTIMES
2009/05/05

Jcodeで文字コード変換をしようとすると落ちる

  perl  charset 
このエントリーをはてなブックマークに追加

3月末にサーバを移行してからAWStatsの再設定をしていなかったので、AWStatsを再設定しました。ついでに2005年分からのログを再処理しようと思ったのですが、なぜかログの前処理のutf8_decode.plが下記のようなエラーを吐いて落ちるので困ってしまいました。

UTF-16BE:Malformed HI surrogate dee8 at /usr/lib/perl5/5.8.8/i386-linux-thread-multi/Encode.pm line 193, <STDIN> line 618012.

該当するコードは下記の部分のようです。

Jcode::convert(\$_,'utf8');

どうやらJcodeが文字変換の際にEncodeを呼び出すようなのですが、ここでおかしな文字が入っているとPerlが死んでしまうようです。同じような問題ではまっている人を見つけたので、あまり本質的な解決方法ではありませんが、eval{ };でくくって誤魔化してしまいました。

参考
 ・Jcode.pmが死ぬ : ひろ式めもちょう

しかたないのでevalで囲った。

    トラックバックについて
    Trackback URL:
    お気軽にどうぞ。トラックバック前にポリシーをお読みください。[policy]
    このエントリへのTrackbackにはこのURLが必要です→https://blog.cles.jp/item/3029
    Trackbacks
    このエントリにトラックバックはありません
    Comments
    愛のあるツッコミをお気軽にどうぞ。[policy]
    古いエントリについてはコメント制御しているため、即時に反映されないことがあります。
    コメントはありません
    Comments Form

    コメントは承認後の表示となります。
    OpenIDでログインすると、即時に公開されます。

    OpenID を使ってログインすることができます。

    Identity URL: Yahoo! JAPAN IDでログイン