阻止xml.etree将特殊字符写为HTML代码

时间:2020-07-14 09:28:08

标签: python html python-3.x xml special-characters

在我的代码中,我修改了一些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="&#235;" />'

1 个答案:

答案 0 :(得分:1)

ElementTree默认为US-ASCII编码。无法用US-ASCII表示ë,因此回退到将字符表示为实体&#235;

解决方案很简单:

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" />'