【问题标题】:Python xml.etree.ElementTree parse force encodingPython xml.etree.ElementTree 解析强制编码
【发布时间】:2020-03-22 19:56:40
【问题描述】:

我收到许多 XML 文件,其中一些编码错误(例如,在 xml 标头中是 ISO-8859-1,但所有字符串都是 UTF-8,等等)

使用 xml.etree.ElementTree 进行解析,这也读取带有编码的 xml 标头(有时是错误的)

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

我想强制另一种编码并从标题中忽略它。

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

【问题讨论】:

  • 与所有这些事情一样:修复损坏的 XML 的来源比尝试构建一个适应生产者错误的消费者要好。 XML 声明不可能与文件编码不匹配,除非在生产端出现严重错误。应该解决这个问题。
  • @Tomalak,是的,这是我的愿望,但我不可能……

标签: python xml encoding xml.etree


【解决方案1】:

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

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

这将忽略 XML 声明,因为文件已经被解码,尽管是手动的。对于普通/兼容的 XML 文档,不推荐使用此方法,应使用ElementTree.parse('filename')

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-01-18
    • 1970-01-01
    • 1970-01-01
    • 2011-05-05
    • 2017-07-15
    • 1970-01-01
    • 1970-01-01
    • 2020-12-09
    相关资源
    最近更新 更多