2012-04-23 129 views
1

UTF-8支持我使用XML::RSSLite解析RSS數據檢索我使用LWP。 LWP正確地檢索正確的編碼,但是當使用RSSLite解析數據時,編碼似乎會丟失,從輸出中刪除像é,è,à等字符。有沒有設置強制編碼的選項?的RSS解析

這裏是我的腳本:

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,因爲它似乎有可能是在我的情況下,更方便的選擇,但它未能不幸安裝。 :(

+0

另一個例子URL給出了一個404未找到。 – daxim 2012-04-23 08:34:39

+1

如果您需要安裝模塊的幫助,請閱讀[什麼是安裝缺少的Perl模塊最簡單的方法?(http://stackoverflow.com/questions/65865/whats-the-easiest-way-to-install-a- missing-perl-module),如果仍然有必要,[打開一個新問題](http://stackoverflow.com/questions/ask)。 – daxim 2012-04-23 08:41:26

+0

非常感謝Daxim Four的答案,有複製/粘貼過程中的錯誤,我已經糾正了它,現在的URL是好的 – ehretf 2012-04-23 10:21:35

回答

3

RSSLite documentation明確地指出:

刪除比0-9其他字符〜@#$%^ & *() - + = A-ZA-Z [];」,!: 「<>?\ S

因此,模塊是無可救藥的壞了。與XML::Feed

+0

謝謝你的回答,我錯過了。我將看看XML:Feed。 – ehretf 2012-04-23 10:23:48

+0

那麼,該模塊被打破,直到有人修復它。不過,我不會說絕望的。 – 2012-04-23 18:33:54

4

我喜歡Mojo::UserAgent隨着Mojo::DOM已經擁有我所需要的支持再試withou牛逼我跟蹤模塊使用的正確組合,並處理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

+0

我確實運行過它,但它顯示的是破損字符代替重音。我確實有utf-8終端,locale和字體。這就是輸出的樣子:http://imgur.com/KyVPJ – 2012-04-24 11:10:02

+1

當你用'perl -C'運行它時會發生什麼? – 2012-04-24 13:26:49

+0

所有的好 - 即perl -C q.pl顯示正確的字符。進一步的測試表明-CO/-C2就足夠了 – 2012-04-24 13:28:54