我们公司希望将我们托管的所有网站从Latin-1转换为UTF-8。经过谷歌搜索,我们的Perl脚本几乎完成了。现在唯一缺少的是XML文件。
将XML从Latin-1转换为UTF-8的最佳方法是什么?它有用吗?
我在问,因为我们对此不确定,因为Google上的大多数条目都解释了如何做到完全相反。有人甚至说utf8可能会导致XML出现问题。你能介绍一下整个XML编码问题吗?
答案 0 :(得分:8)
你在转变什么?数据或XML标签还是别的什么?
我认为您只需要将其读作Latin-1并将其重写为UTF-8,除非您的来源做了一些非常奇怪的事情。解码和编码在文件句柄级别发生。一旦你在Perl中拥有它,它已经在内部UTF-8了。
到目前为止你有什么?你有什么问题?
您的情况是否过于复杂,仅仅使用xmllint?
xmllint --encode utf8 --output filename.xml filename.xml.latin1
如果您使用的是XML :: Parser,请参阅有关该模块的Juerd's Unicode Advice。
如果您要转换的不仅仅是XML文件,iconv可能有所帮助:
iconv -f ISO-8859-1 -t UTF-8 filename.txt.latin1 > filename.txt
答案 1 :(得分:7)
我使用xmllint --encode utf8 FILE-NAME
,示例:
xmllint --encode utf8 --output test.xml test.xml
会正确地将test.xml
(无论编码方式)转换为UTF-8,包括XML序言。
答案 2 :(得分:1)
正如布莱恩在Perl中提到的内部UTF-8。无论你是否愿意,Perl都会转换它。
技巧连接到UTF8标志,该标志是附加到每个字符串的位标志。对于XML :: Parser返回的数据,设置了UTF8标志。
如果您想要摆脱这种行为,请清除UTF8标志。你能做到的一种方法是:
sub de_utf8 {
use bytes;
return "$_[0]";
}
这样,结果字符串将是与原始字符串相同的字节数据。
编辑:有点偏离OP的主题......对不起。