M.C.P.C.

―むり・くり―プラスコミュニケーション(更新終了)


| トップページ |

2005年3月10日 03:02

XML::RSSなどで、euc-jpを処理させる

このエントリーをはてなブックマークに追加 mixiチェック

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 で検索した限りで判断すると、誰もが必ずはまる罠なんだなあと思いました。

投稿 大野 義貴 [RSS] | |

トラックバック(0)

トラックバックURL: http://blog.dtpwiki.jp/MTOS/mt-tb.cgi/876

コメントする