在我的代码中,我修改了一些XML并将其写入输出文件。但是,不幸的是,xml.etree将一些特殊字符转换为HTML字符,如下所示。有什么办法可以避免这种情况?如果无法使用xml.etree,则我可以使用其他Python XML库。
import xml.etree.ElementTree as ET
xml = ET.fromstring("<Item a='ë'/>")
print(ET.tostring(xml))
# b'<Item a="ë" />'
答案 0 :(得分:1)
ElementTree
默认为US-ASCII编码。无法用US-ASCII表示ë
,因此回退到将字符表示为实体ë
。
解决方案很简单:
print(ET.tostring(xml, encoding='unicode'))
# => '<Item a="ë" />'
注意,这将为您提供str
,而不是bytes
,但是省略encoding
参数将为您提供字节,如您自己的示例所示
要将XML写入文件或通过网络发送,则需要将其转换为字节。使用Unicode编码,例如UTF-8:
print(ET.tostring(xml, encoding='utf-8'))
# => b'<Item a="\xc3\xab" />'