▽1
●
うぃんど ●300ポイント ベストアンサー |
外部のページを参照するのは面倒なので、まずは1つにまとめさせてもらいました
#!/usr/bin/perl use utf8; use strict; use XML::FeedPP; print "Content-type: text/html\n\n"; print "<html><head><meta http-equiv=\"Content-Type\" content=\"text/html\; charset=UTF-8\"><title>test</title></head><body>\n"; my $source = 'http://www.nicovideo.jp/ranking/fav/daily/g_popular?rss=2.0'; my $feed = XML::FeedPP->new( $source ); print "Title: ", $feed->title(), "<br />\n"; foreach my $item ( $feed->get_item() ) { #ケース1 print "Title: ", $item->title(), "<br />"; #ケース1 #ケース2 my $stock = $item->title(); print "Title: $stock<br />"; #ケース2 #ケース3 my $stock = $item->title(); print "タイトル: $stock<br />"; #ケース3 #ケース4 my $stock = $item->title(); utf8::decode($stock); print "タイトル: $stock<br />"; #ケース4 } print "</body></html>\n"; exit;
さて、本題への答えですが、外部から読み込んだものは、
そのキャラクタセットなどには一切関知せず、
「そのままの形」で保持されていることが原因となっています
対処例から述べますと、use open IN などで、
「外部から読み込んだものはutf-8として取り扱う」といった、
フラグを立てるようにするなどします
ケース1および2では、
Titleという半角英数字との組み合わせであるために、特に問題は発生せず、
ケース4においては、
単独でフラグを立ててやってますので、これまた問題は発生せず、
問題のケース3では、
日本語との組み合わせになっているため、
そのままの形でつかってくれれば良いものを・・・
気を利かせて(というのは言葉のアヤですが)変換しようとしてしまうようなのです
参考