【发布时间】:2016-08-11 13:41:25
【问题描述】:
有了这个输入文件
<?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 保存在内存中 - 这也意味着我可以使用上面的正则表达式进行验证。
【问题讨论】: