有了这个输入文件为什么Perl XML :: LibXML将UTF8更改为8859-1?
<?xml version="1.0" encoding="UTF-8"?>
<entry>
<title>ú</title>
</entry>
和验证码,
my $raw_xml = read_file("test.xml", binmode => 'raw');
print "$raw_xml\n";
$raw_xml =~ /<title>(.*?)</;
print "Regex finds [$1]\n"; # prints u+accent to UTF8 terminal
my $dom = XML::LibXML->load_xml(string => $raw_xml);
my $xpc = XML::LibXML::XPathContext->new($dom);
my ($entry) = $xpc->findnodes('entry');
my $title = $xpc->findvalue('title', $entry) || '';
print "title is now [$title]\n"; # prints garbage character to UTF8 terminal, u+accent to ISO-8859-1 terminal
在哪里/为什么好好的UTF8被翻译成8位字符集之一(我假设它是8859-1 ,可能是cp1252等)?
我通过Google发现的一切都表明它应该都是utf8从头到尾。但显然不是。
注意:如果我使用binmode在文件句柄上打开文件并将其传递到load_xml,则行为完全相同;我碰巧在真正的代码中有xml在内存中,这也意味着我可以用上面的正则表达式来验证。
谢谢!作为你的回答和一些实验的结果,一个缺失的perl字符拼图碎片适合我,我非常感激。 – milesb