什么是在python lxml库中使用西里尔文的正确方法

时间:2015-04-20 14:25:31

标签: python xml lxml cyrillic

我尝试在其中生成带有西里尔符号的.xml文件。但结果出人意料。避免这种结果的最简单方法是什么? 例如:

from lxml import etree

root = etree.Element('пример')

print(etree.tostring(root))

我得到的是:

b'<&#1087;&#1088;&#1080;&#1084;&#1077;&#1088;/>'

坚持:

b'<пример/>'

1 个答案:

答案 0 :(得分:3)

没有附加参数的

etree.tostring()将仅ASCII数据作为bytes对象输出。您可以使用etree.tounicode()

>>> from lxml import etree
>>> root = etree.Element('пример')
>>> print(etree.tostring(root))
b'<&#1087;&#1088;&#1080;&#1084;&#1077;&#1088;/>'
>>> 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'))
<пример/>