使用python的etree.tostring编码问题

时间:2009-09-15 16:20:38

标签: python xml utf-8 tostring

我正在使用python 2.6.2的xml.etree.cElementTree来创建一个xml文档:

import xml.etree.cElementTree as etree
elem = etree.Element('tag')
elem.text = (u"Würth Elektronik Midcom").encode('utf-8')
xml = etree.tostring(elem,encoding='UTF-8')

在一天结束时,xml看起来像:

<?xml version='1.0' encoding='UTF-8'?>
<tag>W&#195;&#188;rth Elektronik Midcom</tag>

看起来tostring忽略了编码参数,并将'ü'编码成其他一些字符编码('ü'是一个有效的utf-8编码,我很确定)。

对于我做错的任何建议都将不胜感激。

2 个答案:

答案 0 :(得分:19)

您正在对文本进行两次编码。试试这个:

import xml.etree.cElementTree as etree
elem = etree.Element('tag')
elem.text = u"Würth Elektronik Midcom"
xml = etree.tostring(elem,encoding='UTF-8')

答案 1 :(得分:1)

etree.tostring(elem, encoding=str)

将在Python 3中返回str但不返回binary

  

您也可以序列化为Unicode字符串,而无需声明           将unicode函数作为编码传递(或在Py3中传递str),           或者名字'unicode'。这会更改一个字节的返回值           字符串到未编码的unicode字符串。