XML ::简单编码问题

时间:2010-10-23 13:38:15

标签: perl xml-simple

我有一个我要解析的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'});

并且有效

2 个答案:

答案 0 :(得分:3)

XML ::简单易变。

它调用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'};

答案 1 :(得分:0)

十六进制FB(dec 251)是“û”字符的ASCII码。您能详细说明您希望在数据结构中得到什么,这会导致您得出结论“腐败”吗?