Python xml.etree.ElementTree 解析强制编码

Python xml.etree.ElementTree parse force encoding

我收到很多 XML 文件,其中一些文件编码错误(例如 xml header 中的是 ISO-8859-1,但所有字符串都是 UTF-8 , 依此类推)

用于解析 xml.etree.ElementTree 这也读取 xml header 编码(有时是错误的)

input_element = xml.etree.ElementTree.parse("input.xml").getroot()

我想强制使用另一种编码并忽略 header。

有什么简单的方法可以做到这一点吗?

如果您确定编码,您可以使用open()将文件读入一个字符串,然后使用ElementTree.fromstring()将该字符串转换为一个XML文档。

with open("input.xml", encoding="Windows-1252") as fp:
    xml_string = fp.read()
    tree = ElementTree.fromstring(xml_string)

这将忽略 XML 声明,因为文件已经解码,尽管是手动解码。对于 normal/compliant XML 文档,不推荐使用此方法,您应该使用 ElementTree.parse('filename') 代替。