正在删除XML文件开头的BOM表标记



我有一个XML文件,我试图从中删除BOM,因为我需要使用lxml对其进行解析。可以在此处找到该文件的链接。一些简化的代码是:

from lxml import etree
f = open(filename, "r")
ff = f.read()
fff = ff.encode('utf-8-sig')
ffff = fff.decode('utf-8')
tree = etree.fromstring(ffff)

我试着遵循这里的一些例子来处理这种情况,但我仍然会遇到与我开始时相同的错误:

lxml.etree.XMLSyntaxError: Start tag expected, '<' not found, line 1, column 1

我做错了什么?

感谢

您当前的代码正在向后进行编码和解码,最终会得到一个加倍的BOM,而不是完全没有BOM。您希望使用常规utf-8进行编码,并使用utf-8-sig进行解码。

但您可以通过直接从文件中进行解码来避免所有这些。尝试:

f = open(filename, "r", encoding="utf-8-sig")
ff = f.read()
tree = etree.fromstring(ff)

据我所知,这现在正在工作:

f = open(nfile, "r", encoding="utf-8-sig")
ff = f.read()
fff = ff.encode("utf-8")

tree = etree.fromstring(fff)

最新更新