Python 使用ElementTree解析带有特殊字符的XML

Python 使用ElementTree解析带有特殊字符的XML,python,xml,elementtree,Python,Xml,Elementtree,我尝试使用ElementTree解析的GET服务包含一个非UTF8特殊字符,我不控制该服务的内容: respXML = response.content.decode("utf-8") respRoot = ET.fromstring(respXML) 第二行抛出 xml.etree.ElementTree.ParseError:对无效字符号的引用:第3591行第39列 我如何确保不管字符集是什么,都能解析XML,如果我发现非法字符,我可以在以后运行替换?例如,是否存在包含所有内容的编码?我

我尝试使用
ElementTree
解析的GET服务包含一个非UTF8特殊字符,我不控制该服务的内容:

respXML = response.content.decode("utf-8")

respRoot = ET.fromstring(respXML)
第二行抛出

xml.etree.ElementTree.ParseError:对无效字符号的引用:第3591行第39列

我如何确保不管字符集是什么,都能解析XML,如果我发现非法字符,我可以在以后运行替换?例如,是否存在包含所有内容的编码?我知道我可以搜索和替换输入XML字符串,但我更愿意首先解析它,因为我的解析将其转换为更易于搜索的数据结构


所讨论的特殊字符是
但我希望能够摄取任何角色。整个标签是
Alzheimer;s disease

在@tdelaney的帮助下,我通过将输入XML作为字符串擦洗,克服了这个障碍:

respXML = response.content.decode("utf-8")

scrubbedXML = re.sub('&.+[0-9]+;', '', respXML)

respRoot = ET.fromstring(scrubbedXML)

第3591行是什么?我刚刚编辑了问题,看到最后一句了吗?不是编码。。。它是
和#25unicode实体引用这就是问题所在。我不知道如何将外部实体添加到ElementTree中
(其中d是十进制数字)解码为unicode,该字符表示“媒体结尾”字符,该字符不是有效的xml。我唯一能想到的就是用
替换它在将其传递给ET之前。这是插入之前进行清理的一个很好的参数!这可能是某种编码不匹配,例如mbcs被发布到假定的utf-8条目。