Как правильно использовать кириллицу в библиотеке Python lxml

Я пытаюсь сгенерировать.xml файлы с кириллическими символами внутри. Но результат неожиданный. Какой самый простой способ избежать этого результата? Пример:

from lxml import etree

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

print(etree.tostring(root))

Что я получаю это:

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

Стоит из:

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

1 ответ

Решение

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 аргумент; однако вы все равно получите байты, поэтому вывод нужно будет снова декодировать:

>>> 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'))
<пример/>
Другие вопросы по тегам