2015-09-17 50 views
1

讀取具有非ascii字符的文件時,出現UnicodeDecodeError錯誤。這裏是代碼片段UnicodeDecodeError - 讀取文件時出錯

import codecs 
import locale 

print locale.getpreferredencoding() 

fname = "c:\\testing\nonascii.txt" 
f=codecs.open(fname,"r",encoding='utf-8') 
sfile=f.read() 


print type(file) #it's unicode 


print sfile.encode('utf-8') 


print type(sfile.encode('utf-8')) 
+0

給了我們'nonascii.txt'的第幾行。 –

+0

也給我們錯誤,以及你在哪裏得到錯誤。 –

回答

1

根據文件名判斷,您使用的是Windows。 Windows上的文件將不會是而是是UTF-8編碼,除非您特別注意以這種方式保存它們;默認情況下他們會使用你的code page

如果您不知道Windows正在使用什麼代碼頁,則可以使用特殊編碼mbcs來獲取默認設置。如果你希望你的程序能夠在Windows以外的其他系統上工作,你可以使用sys.getfilesystemencoding()來獲得一個可以在當前系統上運行的值;在Windows上它將返回mbcs

import sys 
f=codecs.open(fname,"r",encoding=sys.getfilesystemencoding()) 
0

你的文件不是真正的UTF-8。

有一種可能性是它是UTF-16 with a Byte Order Mark。如果是這樣的問題,你的錯誤將是一個:根據文件的字節序

UnicodeDecodeError: 'utf8' codec can't decode byte 0xfe in position 0: invalid start byte 

UnicodeDecodeError: 'utf8' codec can't decode byte 0xff in position 0: invalid start byte 

還有其他可能的編碼可能正在使用中。如果您發佈實際的回溯信息,我們可能會更明確地進行分析。