Estoy leyendo en un archivo con el módulo csv
de Python, y tengo otra pregunta de codificación (lo siento, hay tantas aquí).Python csv: UnicodeDecodeError
En el archivo CSV, hay £ signos. Después de leer la fila e imprimirla, se han convertido en \ xa3.
Tratando de codificarlos como 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)
He estado leyendo el csv documentation y las numerosas otras preguntas sobre esto en StackOverflow. I piensa que £ ser \ xa3 en ASCII significa que el archivo CSV original está en UTF-8.
(Por cierto, hay una manera rápida de comprobar la codificación de un archivo CSV?)
Si está en UTF-8, entonces no debería el módulo csv ser capaz de hacer frente a ella? Parece que está transformando todos los símbolos en ASCII, aunque la documentación afirma que acepta UTF-8.
He intentado agregar una función unicode_csv_reader
como se describe en el csv examples, pero no ayuda.
---- ----- EDITAR
Debo aclarar una cosa. He visto this question, que se ve muy similar. Sin embargo, la adición de la función definida unicode_csv_reader
no produce un error diferente en su lugar:
yield [unicode(cell, 'utf-8') for cell in row]
UnicodeDecodeError: 'utf8' codec can't decode byte 0xa3 in position 8: unexpected code byte
Así que tal vez mi archivo no es UTF-8, después de todo? ¿Cómo puedo decir?
Qué quiere decir el uso: el rendimiento [Unicode (célula, 'ISO-8859-1') para celular en fila] en su lugar, en la función unicode_csv_reader? Lamentablemente, eso no ayuda: vuelva al error ordinal no en rango (128) nuevamente. – AP257
No tendría mucho sentido utilizar una función llamada unicode() cuando se trata de ASCII. Lo que estoy diciendo es que está tratando con un archivo que está codificado usando una codificación "ISO-8859-1".No publiqué ningún código, porque no sé cómo hacerlo fuera de mi cabeza, pero tu problema es que debes decodificarlo como ISO-8859-1, no como Unicode. – riwalk
OK, gracias. Voy a investigar. ¿Cómo sabías que era ISO-8859-1? En otras palabras, ¿hay alguna manera de que yo verifique las codificaciones yo mismo, en lugar de solo hacer preguntas estúpidas en StackOverflow :) – AP257