Oto mój kod
for line in open('u.item'):
#read each line
za każdym razem, gdy uruchamiam ten kod, pojawia się następujący błąd:
UnicodeDecodeError: 'utf-8' codec can't decode byte 0xe9 in position 2892: invalid continuation byte
Próbowałem rozwiązać ten problem 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. więc co powinienem zrobić! Proszę pomóż.
python
python-3.x
character-encoding
SujitS
źródło
źródło
Odpowiedzi:
Jak zasugerował Mark Ransom, znalazłem właściwe kodowanie tego problemu. Kodowanie to „ISO-8859-1”, więc zastąpienie
open("u.item", encoding="utf-8")
goopen('u.item', encoding = "ISO-8859-1")
rozwiąże problem.źródło
chardet
. Oto jeden-liner (poimport chardet
)chardet.detect(open(in_file, 'rb').read())['encoding']
. Sprawdź tę odpowiedź, aby uzyskać szczegółowe informacje: stackoverflow.com/a/3323810/615422Pracowałem również dla mnie, ISO 8859-1 dużo zaoszczędzi, hahaha, głównie jeśli użyję interfejsu API rozpoznawania mowy
Przykład:
źródło
Twój plik tak naprawdę nie zawiera danych zakodowanych w utf-8, zawiera inne kodowanie. Dowiedz się, co to za kodowanie i użyj go w
open
wywołaniu.Na przykład w kodowaniu Windows-1252
0xe9
będzie to znaké
.źródło
Spróbuj to przeczytać przy użyciu pand
źródło
Jeśli korzystasz
Python 2
z następujących rozwiązań:Ponieważ
encoding
parametr nie działaopen()
, pojawi się następujący błąd:źródło
Python 2
'ISO-8859-1'
jest również znany jako'latin-1'
lub'latin1'
.Możesz rozwiązać problem za pomocą:
„rb” czyta plik w trybie binarnym. Przeczytaj więcej tutaj . Mam nadzieję, że to pomoże!
źródło
To działa:
lub:
źródło
Jeśli ktoś ich szuka, jest to przykład konwersji pliku CSV w Pythonie 3:
źródło
Czasami, gdy
open(filepath)
wfilepath
rzeczywistości nie ma pliku, pojawia się ten sam błąd, więc najpierw upewnij się, że plik, który próbujesz otworzyć, istnieje:mam nadzieję, że to pomoże.
źródło
możesz spróbować w ten sposób:
źródło