我正在尝试解析在我公司内部创建的XML文件。该文件应该是UTF-16编码但我收到的错误与我正在编写的Python脚本(见下文)。我想弄清楚问题是文件还是我的脚本。有没有办法验证编码?我的所有搜索都以XML验证工具或工具结束,这些工具或工具检查格式良好的XML。我希望尝试使用XMLSpy,但我目前无法访问它。
抛出错误的代码是'parser.parse'行(Python 2.7):
from xml.sax import make_parser
from xml.sax.handler import ContentHandler
import codecs
parser = make_parser()
curHandler = XmlHandler()
parser.setContentHandler(curHandler)
parser.parse(codecs.open(infile, 'rb', fileEncoding))
其中'infile'是有问题的XML文件,在这个例子中'fileEncoding'是'UTF-16'。
该脚本适用于UTF-8编码文件。但是对于UTF-16文件,我收到以下错误:
xml.sax._exceptions.SAXParseException: XmlFile.xml:1:30: encoding specified in XML declaration is incorrect
我很抱歉,但我无法发布XML。它并不复杂,但包含来自多个国家的文字/名称。我目前怀疑编码是UTF-8,但编码属性设置为UTF-16。有没有办法验证这个?
更新: 好。所以现在我完全糊涂了。我将XML文件上的编码更改为UTF-8而不是UTF-16,但忘记在脚本上更改它。该脚本按预期运行。所以文件encoding ='UTF-8',但用:
打开parser.parse(codecs.open(infile, 'rb', 'UTF-16'))
按预期工作,没有错误。
更多信息:我正在Win7 / Server 2008环境中开发/执行。
答案 0 :(得分:1)
让自己成为一个HEX编辑器(或编写一个程序来转储输入文件的前八个字节)。
0x3C
(UTF-8),0x003C
(UTF-16)或者可能,但不可能,0x0000003C
(UTF-32)(开场{{1} XML prolog的特征。