如何在Perl中将XML文档从Latin-1转换为UTF-8?

Mik*_*ike 2 xml perl encoding utf-8 latin1

我们公司希望将我们托管的所有网站从Latin-1转换为UTF-8.经过谷歌搜索后,我们的Perl脚本几乎完成了.现在唯一缺少的是XML文件.

将XML从Latin-1转换为UTF-8的最佳方法是什么?它有用吗?

我问,因为我们不确定它,因为谷歌的大多数条目都解释了如何做到完全相反.有人甚至说utf8可能会导致XML出现问题.你能介绍一下整个XML编码问题吗?

bri*_*foy 8

你在转变什么?数据或XML标签还是其他什么?

我认为你只需要将它读作Latin-1并将其重写为UTF-8,除非你的来源做了一些非常奇怪的事情.解码和编码在文件句柄级别发生.一旦你在Perl中拥有它,它已经在内部UTF-8了.

到目前为止你有什么?你有什么问题?

你的情况是否太复杂而不能仅使用xmllint

 xmllint --encode utf8 --output filename.xml filename.xml.latin1
Run Code Online (Sandbox Code Playgroud)

如果您使用的是XML :: Parser,请参阅Juerd关于该模块的Unicode建议.

如果您要转换的不仅仅是XML文件,iconv可能会有所帮助:

iconv -f ISO-8859-1 -t UTF-8 filename.txt.latin1 > filename.txt
Run Code Online (Sandbox Code Playgroud)

  • 这不完全正确!如果您有一个像这样的xml序言:<?xml version ="1.0"encoding ="latin1"?>,如果文档现在以UTF8编码,则必须修改或删除! (3认同)

Joh*_*iss 7

我用xmllint --encode utf8 FILE-NAME,样品:

xmllint --encode utf8 --output test.xml test.xml
Run Code Online (Sandbox Code Playgroud)

将正确转换test.xml(它可能具有的任何编码)到UTF-8,包括XML序言.