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