XML::RSSなどで、euc-jpを処理させる
スポンサードリンク
euc-jp で RSS を配布する系があって、RSS を処理する系が UTF-8 しか受け付けない、そんなシチュエーション。XML は UTF-8 サポートは必須だけれども euc-jp とかは必須じゃないからしょうがないかな、と思うわけですが、となると、RSS を UTF-8 に変換してあげなくてはなりません。
となると、この前作った XML::RSS を使ったスクリプトを利用すると、確か出力は必ず UTF-8 になったはずだからいいじゃん、と思ったわけで、さっそく euc-jp エンコーディングの RSS をぶっこんでみたところ、
Couldn't open encmap euc-jp.enc:ほげほげ
とでやがって、ダメじゃん。てな感じです。
エラーメッセージで検索すると、
Perl XMLでencoding='Shift_JIS'や'euc-jp'を使う [homepage3.nifty.com]
がでてきて、これを使うと、XML::Parser や、それを利用している XML::RSS も、euc-jp で処理ができるという寸法です。だったら、入れるしかないじゃないか! ていうことで、ガリッと入れました。
そしたら、
not well-formed (invalid token) at line 54, column 27, byte 5192 at /usr/lib/perl5/vendor_perl/ 5.8.3/i386-linux-thread-multi/XML/Parser.pm line 187
この子はまだ文句いうですか! よく読むと、well-formed じゃあねーよヴォクゥエとのたまっておられますから、該当する XML 文書(この場合は RSS)を読んでみたら、要素の中に「&」が使っていました。XML では、& は、& て書かなくてはいけないとXMLの赤い本に書いてた気がするので、s/&/&/g すりゃあいいということで、
前回のスクリプトでいうところの、「my $data_from_web = get($url);」のあとに、
$data_from_web =~ s/&/&/g;
を入れました。でも、これって、もともと「&」とか「<」とかなっているものをどうするかって言う部分で問題あり。
とりえあえず目的が達成できているから、めでたし。
~~~
しっかし、& を エスケープするとかいうのは、Web で検索した限りで判断すると、誰もが必ずはまる罠なんだなあと思いました。
スポンサードリンク
トラックバック(0)
トラックバックURL: http://blog.dtpwiki.jp/MTOS/mt-tb.cgi/876
コメントする