1

我有一个要解析的 xml 文件:

<?xml version="1.0" encoding="UTF-8" ?>
<tag>û</tag>

它被Firefox完美解析。但是 XML::Simple 会破坏一些数据。我有一个这样的 perl 程序:

my $content = "<?xml version=\"1.0\" encoding=\"UTF-8\" ?>\n";
$content .= "<tag>\x{c3}\x{bb}</tag>\n";

print "input:\n$content\n";

my $xml = new XML::Simple;
my $data = $xml->XMLin($content, KeepRoot => 1);

print "data:\n";
print Dumper $data;

并得到:

input:
<?xml version="1.0" encoding="UTF-8" ?>
<tag>û</tag>

data:
$VAR1 = {
          'tag' => "\x{fb}"
        };

这似乎不是我所期望的。我认为存在一些编码问题。难道我做错了什么?

UPD:我认为 XMLin 以 utf-8 格式返回文本(作为输入)。刚刚添加

encode_utf8($data->{'tag'});

它奏效了

4

2 回答 2

3

XML::Simple 是善变的。

它的调用 Encode::decode('UTF-8',$content) 将您的 UTF-8 置于本机。

做这个:

my $content_utf8 = "whatevér";
my $xml = XMLin($content_utf8);
my $item_utf8 = Encode::encode('UTF-8',$xml->{'item'});

这种方法也有效,但使用双重编码有风险:

my $content_utf8 = "whatevér";
my $double_encoded_utf8 = Encode::encode('UTF-8',$content_utf8);
my $xml = XMLin($double_encoded_utf8);
my $item_utf8 = $xml->{'item'};
于 2012-06-13T22:15:39.260 回答
0

十六进制 FB (dec 251) 是“û”字符的 ASCII 码。您能否详细说明您期望在数据结构中获得什么,从而得出结论您得到的是“腐败”?

于 2010-10-23T13:48:24.727 回答