Python 如何使xml解析器忽略无效字符?

Python 如何使xml解析器忽略无效字符?,python,python-2.7,xml-parsing,lxml,Python,Python 2.7,Xml Parsing,Lxml,我正在使用python模块lxml解析xml文件。但是,某些xml文件包含无效字符,如®。因此,我得到以下错误 lxml.etree.XMLSyntaxError:输入不正确UTF-8,请指示编码 字节:0xAE 0x0A 0x53 0x6F,第45行,第91列 ->移除角色可以解决问题 如果没有这样的字符,我无法告诉数据提供者为我提供xml。 为了避免重复,我尝试了堆栈溢出的以下解决方案,它给了我相同的错误 parsed_doc = etree.parse(u, etree.XMLParser

我正在使用python模块lxml解析xml文件。但是,某些xml文件包含无效字符,如®。因此,我得到以下错误

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

字节:0xAE 0x0A 0x53 0x6F,第45行,第91列

->移除角色可以解决问题

如果没有这样的字符,我无法告诉数据提供者为我提供xml。 为了避免重复,我尝试了堆栈溢出的以下解决方案,它给了我相同的错误

parsed_doc = etree.parse(u, etree.XMLParser(encoding='utf-8', ns_clean=True, recover=True))

我如何忽略/转义这些字符

正如@jwodder所提到的,xml文件没有使用utf-8编码,即使它有utf-8作为编码属性。我在lxml解析器中将编码参数更改为ISO-8859-1

parsed_doc = etree.parse(u, etree.XMLParser(encoding='ISO-8859-1', ns_clean=True, recover=True))

它工作得很好。

看起来您的数据实际上是用ISO-8859-1编码的。为什么不尝试将其指定为编码呢?谢谢,我将尝试看看这是否解决了问题。顶部xml标记的编码属性为utf-8。这是否意味着数据提供程序有错误?0xAE 0x0A 0x53 0x6F在拉丁语-1中表示“®\nSo”。XML文档是仅使用拉丁语还是混合使用拉丁语1和utf-8?在所有情况下,您至少应该告诉提供商,即使您自己解决了它。它混合了拉丁文1和utf-8。我会告诉我的供应商关于这个问题。谢谢。严格来说,您的xml文件格式仍然不正确。。。我的观点是xml解析器应该自动从xml文件中检测编码。。。手动指定编码违反了XML规范