如何正确编码?

时间:2013-07-05 20:14:17

标签: python xml encoding utf-8 python-3.x

我有一个带有俄文文本的XML文件:

<p>все чашки имеют стандартный посадочный диаметр - 22,2 мм</p>

我使用xml.etree.ElementTree以各种方式操作它(没有触及文本内容)。然后,我使用ElementTree.tostring

info["table"] = ET.tostring(table, encoding="utf8") #table is an Element

然后我用这个字符串做一些其他的东西,最后把它写到一个文件

f = open(newname, "w")
output = page_template.format(**info)
f.write(output)
f.close()

我在我的文件中结束了这个:

<p>\xd0\xb2\xd1\x81\xd0\xb5 \xd1\x87\xd0\xb0\xd1\x88\xd0\xba\xd0\xb8 \xd0\xb8\xd0\xbc\xd0\xb5\xd1\x8e\xd1\x82 \xd1\x81\xd1\x82\xd0\xb0\xd0\xbd\xd0\xb4\xd0\xb0\xd1\x80\xd1\x82\xd0\xbd\xd1\x8b\xd0\xb9 \xd0\xbf\xd0\xbe\xd1\x81\xd0\xb0\xd0\xb4\xd0\xbe\xd1\x87\xd0\xbd\xd1\x8b\xd0\xb9 \xd0\xb4\xd0\xb8\xd0\xb0\xd0\xbc\xd0\xb5\xd1\x82\xd1\x80 - 22,2 \xd0\xbc\xd0\xbc</p>

如何正确编码?

3 个答案:

答案 0 :(得分:1)

您使用

 info["table"] = ET.tostring(table, encoding="utf8")

返回bytes。然后你将它应用于一个格式字符串,这是一个str(unicode),如果这样做,你最终会得到一个bytes对象的表示。

etree可以返回一个unicode对象,如果您使用:

 info["table"] = ET.tostring(table, encoding="unicode")

答案 1 :(得分:0)

问题是ElementTree.tostring返回二进制对象而不是实际字符串。答案是:

info["table"] = ET.tostring(table, encoding="utf8").decode("utf8")

答案 2 :(得分:0)

试试这个 - 输出参数只是没有utf-8编码的俄语字符串。

import codecs
#output=u'все чашки имеют стандартный посадочный диаметр'
with codecs.open(newname, "w", "utf-16") as stream: #or utf-8
    stream.write(output + u"\n")