読者です 読者をやめる 読者になる 読者になる

UTF-8でないXMLファイルの解析

perl rss

極めて稀ですが、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宣言を見てエンコーディング方法を
調べるので、無理です。


この方法だったら、特にマッピングファイルを追加しなくても対応
できます。


というか XMLUTF-8でお願いします。