2010-10-31 44 views
0

我正在嘗試使用各種編碼 - 一些utf-8,一些ISO-8859-2,一些ASCII等等的一些文件。是否有可靠的解碼方式以標準編碼進行處理?如何可靠地將各種編碼解碼爲系統默認編碼

我曾嘗試以下:

import chardet 
encoding = chardet.detect(text) 
text = unicode(text,encoding['encoding']).decode(sys.getdefaultencoding(),'ignore') 

與上面的代碼我仍然得到UnicodeEncodeError錯誤

+0

您可能還想看看[that](http:// stackoverflow .com/questions/368805 /)的問題。 – tzot 2010-11-29 13:41:59

回答

3

使用decode以字節轉換爲Unicode,並encode到Unicode轉換爲字節:

text.decode(encoding['encoding'], 'ignore').encode(sys.getdefaultencoding(), 'ignore') 

雖然我會建議在unicode對象本身上進行處理,或者如果你使用UTF-8編碼的字符串絕對需要使用字節。 sys.getdefaultencoding()'ascii',它提供了非常有限的字符集。另請參見:http://wiki.python.org/moin/DefaultEncoding

0

你大概的意思encode

u = unicode(text, encoding['encoding'], 'ignore') 
text = u.encode(sys.getdefaultencoding(), 'ignore') 

或等同,更常見的是,

u = text.decode(encoding['encoding'], 'ignore') 
text = u.encode(sys.getdefaultencoding(), 'ignore') 

您可能需要在兩個ignore,如上:傳入的文本可能有無效字符在其中,導致它無法解碼爲Unicode,並且它可能具有不能用默認編碼表示的字符,導致其無法編碼。 (儘管你可能不想忽略錯誤,因爲它看起來像只是試圖解決使用錯誤的函數。)