もうアホか、っていうくらいウェブから持ってきたデータを文字コードを解析してutf-8に正規化するみたいなコードを書いてきたので、いい加減飽きてきた。今使ってるモジュールでもそう言う事してくれるのでいいのだけど、なんかそれぞれのモジュールでそれぞれ別の書き方するのもなんだかなぁ・・・と思って、Data::Decode書いたですよ。

Data::Decodeは中身が完全にプラッガブルなので基本はインターフェースを提供するだけなのです。残りは中に指定するオブジェクトをつなげて行く感じ。

use Data::Decode; use Data::Decode::Chain; use Data::Decode::Encode::Guess; use Data::Decode::Encode::HTTP::Response; my $response = $ua->get($url); my $decoder = Data::Decode->new( strategy => Data::Decode::Chain->new( Data::Decode::Encode::HTTP::Response->new(), decoders => [ Data::Decode::Encode::Guess->new( encodings => [ qw(euc-jp sjis jis utf8) ] ), ] ) ); my $decoded_content = $decoder->decode( $response->content, { response => $response } );


HTTP::Response::Encodingとかもあるの知ってるけど、どういうふうにしたところで最後にもう一回デコードがちゃんとできてるのか調べるようなスクリプトばっか書いてるきがするのよねぇ。あとData::Decode::Encode::HTTP::ResponseはちゃんとHeaderとMETAタグ両方みてくれるよ!