2010-05-10 25 views
2

我的目標是編寫一個XML文件,其中的值以區域語言表示。我使用Python來做到這一點,並使用IDLE(Pythong GUI)進行編程。將數據寫入xml文件時的UnicodeEncodeError

雖然我儘量把字寫在一個個XML文件,它提供了以下錯誤:

UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-4: ordinal not in range(128)

現在,我沒有使用任何XML作家庫;相反,我打開一個文件「test.xml」並將數據寫入它。該行遇到此錯誤: f.write(data) 如果我用print語句替換上面的write語句,那麼它會在Python shell上正確地打印數據。

我從Excel文件中讀取的數據不是UTF-8,16或32編碼格式。它以其他格式。 cp1252正在正確讀取數據。

任何幫助獲取這個數據寫入XML文件將不勝感激。

回答

6

你應該.decode傳入cp1252獲得Unicode字符串,並.encode他們utf-8(由XML迄今爲止首選編碼),在你寫的時間,其中unicodedata.decode('cp1252')上獲得的,即

f.write(unicodedata.encode('utf-8')) 

傳入的字節串。

這可以通過使用codecs模塊標準Python庫代替普通open打開每個與他們正確編碼的輸入和輸出文件把脣膏就可以了,但我展示的是底層的機制(和它的通常,雖然並非總是更直接,更直接地應用它,而不是間接地通過codecs--一個風格和品味的問題)。

什麼確實無論是總的原則:翻譯你的輸入字符串只要你可以得到他們之後的Unicode,使用整個處理unicode的,他們回到轉換爲字節串在後期,你可以之前你輸出它們。這給你最簡單,最直接的生活! - )

+0

感謝您的這種快速回復。 :) 我實際上做了同樣的操作,當我得到錯誤... 文件「C:\ test.py」,第64行,在主 uData = items.decode('cp1252') 文件「C :\ Python26 \ lib \ encodings \ cp1252.py「,第15行解碼 返回codecs.charmap_decode(input,errors,decode_table) UnicodeEncodeError:'ascii'編解碼器無法對0-4位置的字符進行編碼:ordinal not在範圍內(128) 我沒有得到真正的理由爲什麼發生這種情況。可能'cp1252'可能不是將用於解碼的實際格式。在這種情況下我能做些什麼? :( – Bobby 2010-05-10 05:50:47

+0

我們可以關閉這個線程,我的問題解決了,其實我的數據已經是unicode數據了,它不應該被解碼,但是,在XML文件中寫入我使用了下面的代碼來解決我的問題。import cgi dataToWrite = cgi.escape(data).encode(「ascii」,「xmlcharrefreplace」)謝謝你的幫助。 – Bobby 2010-05-10 06:04:30