0

我有一个带有俄语文本的 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>

如何正确编码?

4

3 回答 3

1

你用

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

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

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

 info["table"] = ET.tostring(table, encoding="unicode")
于 2013-07-05T20:46:11.680 回答
0

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

info["table"] = ET.tostring(table, encoding="utf8").decode("utf8")
于 2013-07-05T20:44:45.373 回答
0

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

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