2

我正在尝试解析在我公司内部创建的 XML 文件。该文件应该是 UTF-16 编码的,但是我正在编写的 Python 脚本出现错误(见下文)。我试图找出问题出在文件还是我的脚本上。有没有办法验证编码?我所有的搜索都以 XML Validation 工具或检查格式良好的 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 环境中开发/执行。

4

1 回答 1

1

给自己一个 HEX 编辑器(或编写一个程序来转储输入文件的前 8 个字节)。

  1. 在最开始时查找字节顺序标记(BOM)。如果它在那里,那就是你的编码。
  2. 否则,您应该看到0x3C(UTF-8)、0x003C(UTF-16) 或可能但不太可能的是0x0000003C(UTF-32)(<XML 序言的开头字符。
于 2013-07-08T21:45:04.853 回答