簡體   English   中英

我該如何正確編碼?

[英]How do I get this to encode properly?

我有一個帶有俄語文本的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>

如何正確編碼?

你用

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

它返回bytes 然后,您將其應用於格式字符串,即str (unicode),如果這樣做,最終將得到bytes對象的表示形式。

如果您使用etree,則可以返回unicode對象:

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

問題在於ElementTree.tostring返回的是二進制對象,而不是實際的字符串。 答案是:

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

試試看-輸出參數只是不帶utf-8編碼的俄語字符串。

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM