我如何编码Perl字符串,以便将其放入XML文档中?

时间:2010-05-24 04:58:30

标签: xml perl encoding character-encoding

我不太熟悉perl XML库(实际上,我真的很擅长理解编码),我正在做的就是获取一个可能包含诸如“à”之类字符的字符串并将其放入XML文件,但是当我打开文件时,在包含这样一个字符的行中出现编码错误。

所以我只需要一种轻量级的方法来获取字符串并将其编码为XML。

3 个答案:

答案 0 :(得分:4)

您的XML应指定UTF-8编码。例如:

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

UTF-8 and Unicode Standards有很多好消息。

您的Perl程序也应该将其输出文件句柄设置为UTF-8编码,以便正确地写入数据。例如,请参阅open的perl文档。

您需要的唯一特定于XML的转义是XML保留字符。请参阅Stackoverflow上的Where can I get a list of the XML document escape characters?

您可以使用Perl的XML::Code或类似模块来转义特定于XML的字符

答案 1 :(得分:4)

使用LibXML的示例,它是XML的标准大锤子。不轻量级,但你的问题确实是一个熟悉的指甲,至少我们也没有花太多时间编写代码。

use XML::LibXML ();
XML::LibXML::Document->new('1.0', 'UTF-8')->createTextNode($text)->toString; # returns properly encoded fragment

请参阅方法toFile以写入文件。

答案 2 :(得分:1)

我无法回答2工作。试试这个,它产生的XML表示“格式不正确(无效令牌)”:

#!/usr/bin/perl -wT

use XML::LibXML;
use HTML::Entities;

binmode(STDOUT, ':utf8');
my $string = 'foo &auml; bar';
$string = decode_entities($string);
print XML::LibXML::Document->new('1.0', 'UTF-8')->createTextNode($string)->toString();