2011-01-20 84 views
4

我正在研究Python腳本,該腳本讀取以UTF-8編碼的XML文件,對其進行一些操作並將其保存到Google的數據存儲區(它是一個App Engine程序)。使用非ASCII字符在Python中執行文件I/O

我正在閱讀和解析文件的方式只是file.readline()和一些正則表達式。唯一的問題是我正在處理的文件中有很多不同語言的字符,例如,它可能有é或Å或俄語或希臘字符。

我得到這樣的錯誤起初:「UnicodeDecodeError:'ascii'編解碼器無法解碼位置0字節0xd0:序號不在範圍(128)。」然後我試着將打開的文件上的編碼切換到「ISO-8859-15」,這樣可以消除錯誤,但輸出的字符不會顯示正確。

所以我的問題是:如何在沒有Python的情況下使用Python中的UTF-8編碼的文件處理卡住文件中的所有特殊字符?我希望這很清楚,並且提前感謝任何建議。

+0

你的模式和字符串被搜索的unicode字符串? – nmichaels 2011-01-20 21:28:26

+0

是的 - 因爲我不用我的正則表達式搜索任何特殊字符。 – dshipper 2011-01-20 21:32:36

回答

4

指定的str.decode

>>> print '\xe2\x99\x9e'.decode('utf-8') 
♞ 

的UTF-8編碼這應該是一個棋子,但它太渺小了,看看:)

0

要在答案和參考擴大到effbot你可以像這樣處理每一行:

raw = file.readline() 
proc = raw.decode('utf-8') 
1

你說你改變了文件使用的編碼爲ISO-8859-1。您是否嘗試將其更改爲UTF-8?