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

Stop xml.etree from writing special characters as HTML code

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

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

解决方法很简单:

print(ET.tostring(xml, encoding='unicode'))
# => '<Item a="ë" />'

注意 这会给你一个 str,而不是 bytes,但是省略 encoding 参数给你字节,你可以看看你自己的样本。

要将XML写入文件或通过网络发送,您需要将其转换为字节。使用 UTF-8 等 Unicode 编码:

print(ET.tostring(xml, encoding='utf-8'))
# => b'<Item a="\xc3\xab" />'