2013-10-31 9 views
68

Tu jest mój kod,UnicodeDecodeError: kodek 'UTF-8' nie może zdekodować bajt

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

ilekroć ten kod to daje następujący błąd:

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

starałem się rozwiązać to i dodać dodatkowy parametr w open(), kod wygląda jak;

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

Ale znowu daje ten sam błąd. co powinienem zrobić! Proszę pomóż.

+1

Bardzo zakodowane dane, które zakładam. –

+4

Lub po prostu nie dane UTF-8. –

Odpowiedz

159

Zgodnie z sugestią Marka Ransoma, znalazłem odpowiednie kodowanie dla tego problemu. Kodowanie było "ISO-8859-1", więc zastąpienie open("u.item", encoding="utf-8") z open('u.item', encoding = "ISO-8859-1") rozwiąże problem.

+5

Jawność jest lepsza niż niejawna (PEP 20). –

+0

"ISO-8859-1" zadziałało dla mnie .. – Priyansh

18

Twój plik nie zawiera faktycznie zakodowanych danych utf-8, zawiera inne kodowanie. Dowiedz się, co to jest kodowanie i użyj go w wywołaniu open.

W kodowaniu Windows-1252 na przykład 0xe9 będzie oznaczać é.

+2

Więc, jak mogę się dowiedzieć, jakie to jest kodowanie! Używam linux – SujitS

+1

Nie ma sposobu, aby to zrobić, zawsze działa, ale zobacz odpowiedź na to pytanie: http://stackoverflow.com/questions/436220/python-is-there-a-way-to-determine- kodowanie-pliku tekstowego – RemcoGerlich

1

Jeśli ktoś szuka dla nich jest to przykład do konwersji pliku CSV w Pythonie 3:

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

Spróbuj tego czytać używając pandy

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

Jeśli używasz Python 2 następujące będzie rozwiązanie:

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

Ponieważ encoding parametr d oesn't pracy z open(), będzie coraz następujący błąd:

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

Ale to jest wersja 3 – SujitS

+1

Tak, wiem. Pomyślałem, że może to być pomocne dla osób używających 'Python 2' – Jeril

+0

Pracowałem dla mnie w Python3 oraz – fenkerbb

3

pracował również dla mnie, ISO 8859-1 zamierza zaoszczędzić dużo, hahaha, głównie w przypadku korzystania z rozpoznawania mowy API

Przykład:

file = open('../Resources/' + filename, 'r', encoding="ISO-8859-1"); 
+0

Możesz mieć rację, że OP czyta normę ISO 8859-1, jak można wywnioskować z 0xe9 (é) w komunikacie o błędzie, ale powinieneś wyjaśnić, dlaczego twoje rozwiązanie działa. Odniesienie do API rozpoznawania mowy nie pomaga. – RolfBly

0

najprostszych wszystkie roztwory:

Use Pandas to read file, its very simple:

import pandas as pd 
data = pd.read_csv('file_name.csv', encoding='utf-8') 
Powiązane problemy