如何将XML字符转换为utf8?

时间:2016-03-16 13:14:47

标签: xml perl utf-8

当我使用Simple::XML转储xml时,我最终会找到包含转义字符的字符串,例如\x{e6}。这是一个例子

#!/usr/bin/perl
use Data::Dumper;
use Encode;

$s="sel\x{e6}re";
decode_utf8($s);
print Dumper $s;

输出

$VAR1 = 'sel�re';

问题

如何将奇怪的角色变成UTF-8?

更新

这是完整的xml输出。 http://pastebin.com/Sitm01kh

更新2

正如评论中指出的那样,XML很好,但问题出现在我

my $ref = XMLin($xml, ForceArray => 1, KeyAttr => { Element => 'Id' });
print Dumper $ref;

http://pastebin.com/7KDB50fd

2 个答案:

答案 0 :(得分:1)

#!/usr/bin/perl

use DDP;
use XML::Simple;

my $xml = '<Element Id="496669" ParentId="495555" Name="Klasselærere" ContextName="01005 Advanced Engineering Mathematics 1 E15/Klasselærere" IsArchived="false" SubgroupCount="0" />';

my $result = XMLin($xml);

binmode(STDOUT, ":utf8");
print p($result)

产生以下输出

{
   ContextName     "01005 Advanced Engineering Mathematics 1 E15/Klasselærere",
   Id              496669,
   IsArchived      "false",
   Name            "Klasselærere",
   ParentId        495555,
   SubgroupCount   0
   }

Data :: Dumper本身与unicode很奇怪。使用Data :: Printer查看unicode字符

答案 1 :(得分:1)

我猜你的终端无法显示caracter \ xe6。

如果您使用的是Linux,请输入“locale”以查看终端的设置。

您可以尝试设置终端编码:

导出LC_ALL = utf-8