Sto leggendo in un file con il modulo csv
di Python e ho ancora un'altra domanda di codifica (scusa, ce ne sono così tante qui).Python csv: UnicodeDecodeError
Nel file CSV, ci sono segni £. Dopo aver letto la riga e averla stampata, sono diventate \ xa3.
Cercando di codificarli come Unicode produce una 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)
Ho letto il csv documentation e le numerose altre domande su questo su StackOverflow. I penso a che £ diventando \ xa3 in ASCII significa che il file CSV originale è in UTF-8.
(Per inciso, c'è un modo rapido per verificare la codifica di un file CSV?)
Se è in UTF-8, quindi il modulo csv non dovrebbe essere in grado di farvi fronte? Sembra che stia trasformando tutti i simboli in ASCII, anche se la documentazione afferma che accetta UTF-8.
Ho provato ad aggiungere una funzione unicode_csv_reader
come descritto nello csv examples, ma non aiuta.
---- EDIT -----
vorrei chiarire una cosa. Ho visto this question, che sembra molto simile. Ma aggiungendo la funzione unicode_csv_reader
definita non produce un errore diverso, invece:
yield [unicode(cell, 'utf-8') for cell in row]
UnicodeDecodeError: 'utf8' codec can't decode byte 0xa3 in position 8: unexpected code byte
Quindi forse il mio file non è UTF8, dopo tutto? Come posso dire?
cosa si intende utilizzare: la resa [unicode (cella, 'ISO-8859-1') per la cellula in riga], invece, nella funzione unicode_csv_reader? Sfortunatamente questo non aiuta - ritorna di nuovo all'errore ordinale non nel range (128). – AP257
Non avrebbe molto senso usare una funzione chiamata unicode() quando si ha a che fare con ASCII. Quello che sto dicendo è che hai a che fare con un file codificato usando una codifica "ISO-8859-1".Non ho inserito alcun codice, perché non so come farlo fuori di testa, ma il tuo problema è che devi decodificarlo come ISO-8859-1, non come Unicode. – riwalk
OK, grazie. Indagherò Come sapevi che era ISO-8859-1? In altre parole, c'è un modo per me di controllare me stesso le codifiche, piuttosto che semplicemente porre domande stupide su StackOverflow :) – AP257