如何使用ElementTree正确解析utf-8XML?

我需要帮助来理解为什么用xml.etree.ElementTree解析xml文件*会产生以下错误

*我的测试xml文件包含阿拉伯语字符。

任务:
打开并解析utf8_file.xml文件

我的第一次尝试:

将xml.etree.ElementTree导入为etree
使用codecs.open('utf8_file.xml','r',encoding='utf-8')作为utf8_文件:
xml_tree=etree.parse(utf8_文件)

结果1:

UnicodeEncodeError:“ascii”编解码器无法对236-238位置的字符进行编码:序号不在范围内(128)

我的第二次尝试:

将xml.etree.ElementTree导入为etree
使用codecs.open('utf8_file.xml','r',encoding='utf-8')作为utf8_文件:
xml\u string=etree.tostring(utf8\u文件,编码='utf-8',方法='xml')
xml\u tree=etree.fromstring(xml\u string)

结果2:

AttributeError:“文件”对象没有属性“getiterator”

请解释上述错误,并对可能的解决方案发表意见

将字节解码留给解析器;不要先解码:

将xml.etree.ElementTree导入为etree
打开('utf8_file.xml','r')作为xml_文件:
xml_tree=etree.parse(xml_文件)

XML文件必须在第一行中包含足够的信息,以便解析器进行解码。如果缺少标头,则解析器必须假定使用了UTF-8

因为保存此信息的是XML头,所以解析器负责执行所有解码

第一次尝试失败,因为Python试图再次对Unicode值进行编码,以便解析器能够按预期处理字节字符串。第二次尝试失败,因为etree.tostring()要求将已解析的树作为第一个参数,而不是unicode字符串

发表评论