Czytam w pliku z modułem Pythona csv
i mam jeszcze inne pytanie dotyczące kodowania (przepraszam, jest ich tu wiele).Python csv: UnicodeDecodeError
W pliku CSV są znaki £. Po przeczytaniu wiersza i wydrukowaniu stały się \ xa3.
Próbując zakodować je jako Unicode wytwarza UnicodeDecodeError
:
row = [unicode(x.strip()) for x in row]
UnicodeDecodeError: 'ascii' codec can't decode byte 0xa3 in position 0: ordinal not in range(128)
I zostały czytanie csv documentation i wiele innych pytań na ten temat na StackOverflow. I myślę, że to, że £ staje się \ xa3 w ASCII oznacza, że oryginalny plik CSV jest w UTF-8.
(Nawiasem mówiąc, jest tam szybki sposób sprawdzić kodowanie pliku CSV?)
Jeśli jest w UTF-8, wtedy nie powinno moduł csv być w stanie poradzić sobie z tym poradzić? Wygląda na to, że wszystkie symbole są przekształcane w ASCII, mimo że dokumentacja twierdzi, że akceptuje UTF-8.
Próbowałem dodać funkcję unicode_csv_reader
, jak opisano w csv examples, ale to nie pomaga.
---- EDIT -----
I powinna wyjaśnić jedną rzecz. Widziałem this question, który wygląda bardzo podobnie. Ale dodanie funkcji unicode_csv_reader
zdefiniowane tam produkuje inny błąd zamiast:
yield [unicode(cell, 'utf-8') for cell in row]
UnicodeDecodeError: 'utf8' codec can't decode byte 0xa3 in position 8: unexpected code byte
Więc może mój plik nie jest UTF8 po wszystkim? Jak mogę to powiedzieć?
masz na myśli zastosowanie: plastyczności [Unicode (komórki „ISO-8859-1”) na komórki wiersz] zamiast, w funkcji unicode_csv_reader? Niestety to nie pomaga - z powrotem do błędu porządkowego nie w zasięgu (128). – AP257
Nie byłoby sensu używać funkcji zwanej unicode() podczas pracy z ASCII. Chodzi o to, że mamy do czynienia z plikiem zakodowanym przy użyciu kodowania "ISO-8859-1".Nie napisałem żadnego kodu, ponieważ nie wiem, jak to zrobić z góry mojej głowy, ale twój problem polega na tym, że musisz go rozszyfrować jako ISO-8859-1, a nie Unicode. – riwalk
OK, dziękuję. Zbadam. Skąd wiesz, że to był ISO-8859-1? Innymi słowy, czy istnieje sposób, aby samemu sprawdzić kodowanie, zamiast zadawać głupie pytania na temat StackOverflow :) – AP257