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

问题描述 投票:1回答:2

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

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

我做错了什么?

谢谢

python-3.x lxml
2个回答
1
投票

您当前的代码正在向后进行编码和解码,最后将BOM增加了一倍,而不是根本没有。您要使用常规utf-8进行编码,并使用utf-8-sig进行解码。

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

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

tree = etree.fromstring(ff)

0
投票

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

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


tree = etree.fromstring(fff)
© www.soinside.com 2019 - 2024. All rights reserved.