在 python lxml 库中使用西里尔字母的正确方法是什么
What is right way to use cyrillic in python lxml library
我尝试生成 .xml 文件,其中包含西里尔符号。但结果出乎意料。避免这种结果的最简单方法是什么?
示例:
from lxml import etree
root = etree.Element('пример')
print(etree.tostring(root))
我得到的是:
b'<пример/>'
我代替:
b'<пример/>'
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'))
<пример/>
我尝试生成 .xml 文件,其中包含西里尔符号。但结果出乎意料。避免这种结果的最简单方法是什么? 示例:
from lxml import etree
root = etree.Element('пример')
print(etree.tostring(root))
我得到的是:
b'<пример/>'
我代替:
b'<пример/>'
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'))
<пример/>