我正在尝试使用 LXML 解析 ~200MB XML 文件。我愚蠢地做etree.parse(xml_path)
,没有任何encoding
参数作为参数,然后使用iterwalk()
迭代一些子节点,认为它会降低内存消耗。它奏效了,我可以解析整个 XML 文件,尽管速度很慢。然后我意识到在做etree.parse(xml_path)
时,整个文件被加载到内存中,所以做iterparse()
或iterwalk()
之后没有意义。
所以现在,我试图直接etree.iterparse(xml_path)
在同一个文件上做,但我得到了
UnicodeDecodeError: 'utf-8' codec can't decode byte 0x93 in position 5123: invalid start byte
我尝试同时使用encoding='utf-8'
和encoding='ISO-8859-1'
作为参数,iterparse()
但错误仍然存在。我的 XML 文件指出编码是'ISO-8859-1'
.
TL;DR: etree.parse()
工作但etree.iterparse()
由于编码错误而失败。我浏览了有关 iterparse() 编码的所有 SO 答案,但似乎还没有人遇到过这个问题。