UTF-8支持RSS解析

时间:2012-04-23 08:18:37

标签: perl unicode utf-8 rss

我正在使用XML::RSSLite来解析我使用LWP检索到的RSS数据。 LWP正确地以正确的编码进行检索,但是当使用RSSLite来解析数据时,编码似乎丢失了,并且从输出中删除了é,è,à等字符。是否有设置选项以强制编码?

这是我的剧本:

use strict; 
use XML::RSSLite; 
use LWP::UserAgent; 
use HTTP::Headers; 
use utf8; 

my $ua = LWP::UserAgent->new; 
$ua->timeout(10); 
$ua->env_proxy; 
my $URL = "http://www.boursier.com/syndication/rss/news/FR0004031839/FR"; 
my $response = $ua->get($URL); 

if ($response->is_success) { 
   my $content = $response->decoded_content((charset => 'UTF-8')); 
   my %result; 
   parseRSS(\%result, \$content); 
   foreach my $item (@{ $result{items} }) { 
   print "ITEM: $item->{title}\n"; 
   } 
}

我尝试使用XML::RSS,因为它似乎有更多选项,在我的情况下可能很方便,但不幸的是它无法安装。 :(

2 个答案:

答案 0 :(得分:4)

我喜欢Mojo::UserAgent以及Mojo::DOM已经获得了我需要的支持,而我没有跟踪正确使用的模块组合,它处理UTF-8位而没有做任何特别的事情:

use v5.10;
use open qw( :std :utf8 ); 
use Mojo::UserAgent; 

my $ua = Mojo::UserAgent->new; 
my $URL = "http://www.boursier.com/syndication/rss/news/FR0004031839/FR"; 
my $response = $ua->get($URL)->res; 

my @links = $response
    ->dom( 'item > title' )
    ->map( sub { $_->text } )
    ->each;

$" = "\n";
print "@links\n";

我在Painless RSS processing with Mojo

有另一个例子

答案 1 :(得分:3)

RSSLite documentation明确指出:

  

删除0-9以外的字符〜!@#$%^& *() - + = a-zA-Z [];',。:“<>?\ s

因此,该模块无可救药地被打破。请使用XML::Feed

重试