我不太熟悉perl XML库(实际上,我真的很擅长理解编码),我正在做的就是获取一个可能包含诸如“à”之类字符的字符串并将其放入XML文件,但是当我打开文件时,在包含这样一个字符的行中出现编码错误。
所以我只需要一种轻量级的方法来获取字符串并将其编码为XML。
答案 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 ä bar';
$string = decode_entities($string);
print XML::LibXML::Document->new('1.0', 'UTF-8')->createTextNode($string)->toString();