2012-12-07 63 views
1

我試圖通過一個XML文件進行迭代(UTF-8編碼,始於)與LXML,但得到的字符丂以下錯誤:LXML編碼錯誤

UnicodeEncodeError:「CP932 '編解碼器無法在位置0編碼字符u'\ u4e02':非法多字節序列

在此之前的其他字符被正確打印出來。 的代碼是:

parser = etree.XMLParser(encoding='utf-8') 
tree = etree.parse("filename.xml", parser) 
root = tree.getroot() 
for elem in root: 
    print elem[0].text 

是否錯誤意味着它不解析爲UTF-8,但在移動JIS不是文件?

回答

2

UnicodeEncodeError的堆棧跟蹤指向發生異常的位置。 不幸的是你沒有包含它,但它很可能是unicode文本打印到標準輸出的最後一行。我假設stdout在你的系統上使用cp932編碼。

如果我的假設是正確的,你應該考慮改變你的環境,使得stdout使用可以表示unicode字符的編碼(如UTF-8)。 (例如參見Writing unicode strings via sys.stdout in Python)。

+0

哦所以這只是stdouts編碼,我沒有意識到!我只是爲了測試而使用它,畢竟我沒有問題:D 謝謝! – usagidon

2

我有類似的情況使用lxml的objectify。以下是我能夠修復它的方式。

import unicodedata 
my_name = root.name.text 
if isinstance(my_name, unicode): 
    # Decode to string. 
    my_name = unicodedata.normalize('NFKD', my_name).encode('ascii','ignore') 
+0

完美適用於'r = requests.get(...)',它不適用於'objectify.XML(r.text)' –