我尝试在其中生成带有西里尔符号的.xml文件。但结果出人意料。避免这种结果的最简单方法是什么? 例如:
from lxml import etree
root = etree.Element('пример')
print(etree.tostring(root))
我得到的是:
b'<пример/>'
坚持:
b'<пример/>'
答案 0 :(得分:3)
etree.tostring()
将仅ASCII数据作为bytes
对象输出。您可以使用etree.tounicode()
:
>>> from lxml import etree
>>> root = etree.Element('пример')
>>> print(etree.tostring(root))
b'<пример/>'
>>> print(etree.tounicode(root))
<пример/>
或使用encoding
argument指定编解码器;但是你仍然会得到字节,所以输出需要再次解码:
>>> print(etree.tostring(root, encoding='utf8'))
b'<\xd0\xbf\xd1\x80\xd0\xb8\xd0\xbc\xd0\xb5\xd1\x80/>'
>>> print(etree.tostring(root, encoding='utf8').decode('utf8'))
<пример/>
将编码设置为unicode
会为您提供相同的输出tounicode()
,并且是首选拼写:
>>> print(etree.tostring(root, encoding='unicode'))
<пример/>