【问题标题】:What is right way to use cyrillic in python lxml library在 python lxml 库中使用西里尔文的正确方法是什么
【发布时间】:2015-04-20 14:25:31
【问题描述】:

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

from lxml import etree

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

print(etree.tostring(root))

我得到的是:

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

代替:

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

【问题讨论】:

  • 我无法尝试用西里尔文制作标签名称 - 仅作为示例。而不是 - 我尝试在标签之间放置西里尔符号。

标签: python xml lxml cyrillic


【解决方案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 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'))
<пример/>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-09
    相关资源
    最近更新 更多