2012-07-18 49 views
0

這個問題的標題是一樣的this one,但我的問題是不同的。用ElementTree寫入UTF-8數據的UTF-8文件再次

我使用tarfile.TarFile.extractfile()從tar.gz存檔中讀取數據,並將其存儲在xml.etree.ElementTree.Element中。數據是utf-8編碼的。

當我嘗試使用xml.etree.ElementTree.ElementTree.write()把它放在一個文件,我得到這個:

Traceback (most recent call last): 
    File "../python/GetDoc.py", line 150, in <module> 
    ET.ElementTree(elements).write(args.outfile, encoding="us-ascii", method="text") 
    File "/usr/lib/python2.7/xml/etree/ElementTree.py", line 815, in write 
    _serialize_text(write, self._root, encoding) 
    File "/usr/lib/python2.7/xml/etree/ElementTree.py", line 1007, in _serialize_text 
    write(part.encode(encoding)) 
UnicodeDecodeError: 'ascii' codec can't decode byte 0xc3 in position 10: ordinal not in range(128) 
+1

你是如何讀取文件中的數據的?你是否正確地將它從UTF-8解碼爲unicode對象? – BrenBarn 2012-07-18 02:26:05

+0

很快!事實上,這似乎是問題所在。我曾經天真地想過,ElementTree能夠處理UTF-8字符串。來吧,寫一個答案,我會接受它(: – drevicko 2012-07-18 02:29:21

+0

好吧,我做出了答案。 – BrenBarn 2012-07-18 02:37:06

回答

1

你是如何讀取文件中的數據的?你是否正確地將它從UTF-8解碼爲unicode對象? ElementTree將需要unicode對象,而不是使用UTF-8編碼的字節串。

0

我能夠通過轉換我的字符串轉換爲Unicode來解決這個在將它們添加到我的ElementTree.Element對象之前使用myString.decode('utf-8')。看來ET.ElementTree.write()對其他字符串編碼不滿意。