lxml.etree.XMLSyntaxError:输入不正确的UTF-8,指示编码?

lxml.etree.XMLSyntaxError: Input is not proper UTF-8, indicate encoding?

提问人:Ambitiouscoder 提问时间:3/31/2023 最后编辑:Mark TolonenAmbitiouscoder 更新时间:3/31/2023 访问量:193

问:

我有一个包含 200 万个观测值的 xml 文件,我想将其转换为 csv,但我收到以下错误。

File "src\lxml\parser.pxi", line 609, in lxml.etree._ParserContext._handleParseResult
File "src\lxml\parser.pxi", line 618, in lxml.etree._ParserContext._handleParseResultDoc
File "src\lxml\parser.pxi", line 728, in lxml.etree._handleParseResult
File "src\lxml\parser.pxi", line 657, in lxml.etree._raiseParseError
File "input/stackoverflow.com/Posts.xml", line 9 lxml.etree.XML
SyntaxError: Input is not proper UTF-8, indicate encoding ! Bytes: 0xFC 0x74 0xFC 0x70, line 9, column 360

我已经包含了 encoding= “utf-8”,但我不确定这个错误的来源是什么。谁能帮忙?

我也尝试了下面的代码,它给了我类似的编码错误。

from lxml import etree
parser = etree.XMLParser(recover=True)
etree.fromstring(filename, parser=parser)

error: xml.etree.ElementTree.ParseError: not well-formed (invalid token): line 9, column 359
xml utf-8 堆栈溢出

评论

0赞 deceze 3/31/2023
那么,文件实际上是用什么编码的?显然它不是 UTF-8。
0赞 Mark Tolonen 3/31/2023
如果不检查文件,我们无法告诉您正确的编码是什么。我们不需要整个文件,只需要几行字符未以 UTF-8 解码。具体来说,至少是导致错误的行(第 9 行,第 360 列)。

答:

0赞 Ambitiouscoder 3/31/2023 #1

我能够通过添加 encoding= 'latin1' 来消除该错误并稍微更改我的代码。

context = etree.iterparse(sourcefilename, events=('end',), tag='row',encoding= "latin1"

但是,我面临着另一个问题

lxml.etree.XMLSyntaxError:xmlParseEntityRef:无名称,第 26451 行,第 2887 列

显然是因为有一些无效的字符,我不知道我应该如何替换它们。

评论

0赞 Mark Tolonen 3/31/2023
请注意,编码永远不会失败,因为 Unicode 代码点分配给每个可能的单个字节 (0-255)。如果文件编码不是 ,它仍然会分配错误的代码点。如果没有看到文件,我们无法为您提供更好的选择。latin1latin1