« Blog記事検索をつくってみた。 | メイン | ChaSenにSKK辞書を追加 »

Jcode.pmのバグ?Text::Iconvを使う

BlogSurfを作りながら気づいて悩んだのだが、
Perl5.6でJcode.pmのUTF-8の扱いにバグ?があるようだ。

my $text="適当な文字列";
my $utf8=Jcode->new($text)->utf8;
my $euc = Jcode->new($utf8)->euc;
print getcode($euc);

の結果がutf8となってしまうことがあった。

BlogSurfでは、取得してきたRSSをUTF-8にして、XML::RSSモジュールへ渡して、
データベースやchasenへ渡すときはeucにするということをしています。
eucに変換できないとすべてがおかしくなっていくので困ります。

なので、CPANを探してみつかったText::Iconvを導入して

my %codehash=(
	ascii=>"ascii",
	binary=>"",
	euc=>"euc-jp",
	sjis=>"Shift_JIS",
	jis=>"ISO-2022-JP",
	ucs2=>"UCS-2",
	utf8=>"UTF-8"
);
my $iconv = Text::Iconv->new($codehash{getcode($str)},'変換したいcode');
my $newstr = $iconv->convert($str);


BlogSurfの文字化けはこれで解消しました。
よかったよかった。