2013-10-31 104 views
68

這裏是我的代碼,的UnicodeDecodeError: 'UTF-8' 編解碼器不能解碼字節

for line in open('u.item'): 
#read each line 

每當我運行此代碼它提供了以下錯誤:

UnicodeDecodeError: 'utf-8' codec can't decode byte 0xe9 in position 2892: invalid continuation byte 

我試圖解決這並在open()中添加一個額外的參數,代碼看起來像;

for line in open('u.item', encoding='utf-8'): 
#read each line 

但是它又給出了同樣的錯誤。 那我該怎麼做!請幫忙。

+1

我會假設嚴重編碼的數據。 –

+4

或者只是不是UTF-8數據。 –

回答

159

正如Mark Ransom所建議的那樣,我找到了適合該問題的正確編碼方式。編碼爲「ISO-8859-1」,因此用open('u.item', encoding = "ISO-8859-1")代替open("u.item", encoding="utf-8")將解決該問題。

+5

顯式優於隱式(PEP 20)。 –

+0

「ISO-8859-1」爲我制定了.. – Priyansh

18

你的文件實際上並不包含utf-8編碼數據,它包含一些其他的編碼。找出那個編碼是什麼,並在open調用中使用它。

在Windows-1252編碼中,例如0xe9將是字符é

+2

那麼,我怎樣才能找出它是什麼編碼!我正在使用linux – SujitS

+1

有沒有辦法做到這一點總是有效的,但看到這個問題的答案:http://stackoverflow.com/questions/436220/python-is-there-a-way-to-determine-文本文件編碼 – RemcoGerlich

1

如果有人找這些,這是在Python 3轉換CSV文件的示例:

try: 
    inputReader = csv.reader(open(argv[1], encoding='ISO-8859-1'), delimiter=',',quotechar='"') 
except IOError: 
    pass 
9

試試這個如果你正在使用Python 2使用熊貓

pd.read_csv('u.item', sep='|', names=m_cols , encoding='latin-1') 
6

閱讀以下將解決方案:

import io 
for line in io.open("u.item", encoding="ISO-8859-1"): 
    # do something 

因爲encoding參數d oesn't與open()的工作,你會得到以下錯誤:

 
TypeError: 'encoding' is an invalid keyword argument for this function 
+0

但這是版本3 – SujitS

+1

是的,我知道。我認爲這可能對使用Python 2的人有所幫助 – Jeril

+0

在Python3中爲我工作 – fenkerbb

3

也爲我工作,ISO 8859-1是要節省很多,哈哈,主要是如果使用語音識別API的

例如:

所有解決方案的
file = open('../Resources/' + filename, 'r', encoding="ISO-8859-1"); 
+0

您可能是正確的OP正在讀取ISO 8859-1,可以從錯誤消息中的0xe9(é)中推導出來,但是您應該解釋爲什麼您的解決方案能夠正常工作。對語音識別API的引用沒有幫助。 – RolfBly

0

最簡單的:

Use Pandas to read file, its very simple:

import pandas as pd 
data = pd.read_csv('file_name.csv', encoding='utf-8') 
相關問題