2007年08月31日(金) [過去の今日]
#2 Perlでそうそう文字化けしない文字コード変換のやり方まとめ
なんかチャット仲間のところで動いているPerlスクリプトなのだが、いくつかのサイトの情報を取得する代物。この日記も取得してるのだが、なぜかうちサイトだけ文字化けする。
で、コードを見せてもらったら、NKF.pmだのjcodd.plだのJcode.pmだの使ってて、それぞれのライブラリに文字コード判別任せてるみたい。ずいぶん昔のコードなんだろうなあ。
というわけで、自分のためのメモという意味もこめて、文字化けしにくい現代的な文字コード自動判別のやり方を書いておこう。
use Encode; use Encode::Guess qw/ascii utf8 euc-jp shiftjis 7bit-jis/; my $dec = Encode::Guess->guess($str); if (ref $dec) { # utf8フラグを付けた文字列を取得 my $utf8str = $dec->decode($str); # 上と同じだが別のやり方 my $utf8str = Encode::decode($dec->name, $str); # Shift_JISに変換した文字列を取得 my $sjis_str = Encode::encode('shiftjis', Encode::decode($dec->name, $str)); # $strの中味をEUC-JPに変換 Encode::from_to($str, $dec->name, 'euc-jp'); }
ってな感じ。
EncodeもEncode::Guessもperlの標準モジュールになってるから、相当古いPerlでもなければ入ってるはず。
(@307)