[英]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.