我正在尝试在 UTF8 编码文本上使用 XML::RAI perl 模块,但仍然有错误,我不太明白...这是代码(它不应该做任何有用的事情):
use HTTP::Request;
use LWP::UserAgent;
use XML::RAI;
use Encode;
my $ua = LWP::UserAgent->new;
sub readFromWeb{
my $address = shift;
my $request = HTTP::Request->new( GET => $address );
my $response = $ua->request( $request );
return unless $response->code == 200;
return decode("utf8", $response->content());
}
sub readFromRSS{
my $address=shift;
my $content = readFromWeb $address;
my $rai = XML::RAI->parse_string($content);
#this line "causes" the error
}
readFromRSS("http://aktualne.centrum.cz/export/rss-hp.phtml");
#I am testing it on this particular RSS
错误是:
Cannot decode string with wide characters at /usr/lib/perl5/5.8.8/i686-linux/Encode.pm line 166.
我不知道这是我的错还是 XML::RAI 的错。如果 $content 已经从 utf8 解码,我不知道这些宽字符在哪里......
编辑:由于某种原因我仍然不明白,删除“解码”部分实际上解决了问题。
问题是双重解码。XML::RAI::parse_string()
显然
需要 UTF-8 编码的文档并自行进行解码。如果你
传入一个已经解码的字符串,第二次解码会失败,
当然:
#!/usr/bin/perl
use strict;
use warnings;
use Encode qw( decode );
use LWP::Simple qw( get );
my $xml = get("http://aktualne.centrum.cz/export/rss-hp.phtml");
$xml = decode('UTF-8', $xml);
$xml = decode('UTF-8', $xml); # dies: Cannot decode string with wide characters ...
所以只需跳过decode()
迈出一步,你就会没事的。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)