UTF-8でないXMLファイルの解析
極めて稀ですが、XMLファイル(RSS)等がUTF-8でエンコーディング
されていないときがあります。一応処理はできるようなんですが、
いろいろと設定がやるのが面倒くさいので以下のようなことで
実現しました。
#!/usr/bin/perl use strict; use warnings; use Encode; use LWP::UserAgent; use XML::RSS; my $url = shift @ARGV or die "usage rss.pl url\n"; my $ua = LWP::UserAgent->new(); my $response = $ua->get($url); die "Can't download $url\n" if $response->is_error; my $content = $response->decoded_content; $content =~ s/encoding="[^"]+"/encoding="UTF-8"/; my $rss = XML::RSS->new; $rss->parse( $content ); foreach my $item ( @{$rss->{'items'}} ) { print "title is ", encode_utf8($item->{'title'}), "\n"; }
デコードして、XML宣言のエンコーディング部分を UTF-8に置換する。
デコードしただけの文章をパーサに突っ込むだけでいいっていうなら
いいんだけど、パーサはちゃんとXML宣言を見てエンコーディング方法を
調べるので、無理です。
この方法だったら、特にマッピングファイルを追加しなくても対応
できます。