UnicodeDecodeError: el códec ‘utf-8’ no puede decodificar el byte 0x96 en la posición 35: byte de inicio no válido

3 minutos de lectura

avatar de usuario de user3734568
usuario3734568

Soy nuevo en Python, estoy tratando de leer el archivo csv usando el siguiente script.

Past=pd.read_csv("C:/Users/Admin/Desktop/Python/Past.csv",encoding='utf-8')

Pero, al recibir el error “UnicodeDecodeError: el códec ‘utf-8’ no puede decodificar el byte 0x96 en la posición 35: byte de inicio no válido”, ayúdenme a saber el problema aquí, utilicé la codificación en el script y pensé que resolvería el error.

Avatar de usuario de Liam
Liam

Esto sucede porque eligió la codificación incorrecta.

Ya que está trabajando en una máquina con Windows, simplemente reemplazando

Past=pd.read_csv("C:/Users/.../Past.csv",encoding='utf-8') 

con

Past=pd.read_csv("C:/Users/.../Past.csv",encoding='cp1252')

debería resolver el problema.

  • Cómo determinaste eso cp1252 fue la codificación adecuada? Lo más probable es que no fuera así, pero tuviste suerte porque dejó de arrojar errores, pero ahora tienes caracteres incorrectos en tus datos.

    – Mark Ransom

    28 de julio de 2021 a las 16:36

  • @MarkRansom sí

    – Liam

    28 de julio de 2021 a las 18:45

  • La forma de averiguar la codificación es con la biblioteca chardet. Usar eso en el archivo con este error me dio “Windows-1252” como codificación, que es un sinónimo de “cp1252” (docs.python.org/3.8/library/codecs.html#codificación-estándar). Consulte stackoverflow.com/a/61025300/2800876 para saber cómo hacerlo.

    – Zags

    7 abr 2022 a las 15:29


avatar de usuario de ask_me
Pregúnteme

Intenta usar:

pd.read_csv("Your filename", encoding="ISO-8859-1")

El código que analicé de algún sitio web se convirtió en esta codificación en lugar de la codificación UTF-8 predeterminada, que es estándar.

  • Bienvenido a StackOverflow. Las respuestas que solo contienen código tienden a marcarse para su eliminación, ya que son de “baja calidad”. Lea la sección de ayuda sobre cómo responder preguntas y luego considere agregar algún comentario a su respuesta.

    –Graham

    7 de marzo de 2018 a las 2:18

  • Sí, ISO-8859-1 elimina todos los errores porque cada posible byte se asigna a un carácter válido. Sin embargo, no significa que los caracteres sean correctos. ¿Cómo determinaste la codificación correcta utilizada por el sitio web?

    – Mark Ransom

    28 de julio de 2021 a las 16:33

Use esta solución, eliminará (ignorará) los caracteres y devolverá la cadena sin ellos. Solo use esto si su necesidad es quitarlos, no convertirlos.

with open(path, encoding="utf8", errors="ignore") as f:

Usando errors="ignore" Solo perderás algunos personajes. pero si no le importan, ya que parecen ser caracteres adicionales que se originan en el formato y la programación incorrectos de los clientes que se conectan a mi servidor de socket. Entonces es una solución directa fácil. referencia

Lo siguiente me funciona muy bien:

encoding = 'latin1'

Es una pregunta antigua pero aparece mientras busca soluciones a este error. Así que pensé en responder por todos los que todavía tropiezan con este hilo. La codificación del archivo se puede verificar antes de pasar el valor correcto para el argumento de codificación. Para obtener la codificación, una opción simple en Windows es abrir el archivo en Notepad++ y mirar la codificación. El valor correcto para el argumento de codificación se puede encontrar en la documentación de Python. Mire esta pregunta y las respuestas en stackoverflow para obtener más detalles sobre las diferentes posibilidades para obtener la codificación del archivo.

Avatar de usuario de Juba Fourali
Juba Fourali

Usar el siguiente código funciona para mí:

with open(keeniz_dir + '/world_cities.csv',  'r', encoding='latin1') as input:

Avatar de usuario del desarrollador-Felix
Desarrollador-Felix

df = pd.read_csv( "/content/data.csv",encoding='latin1')

Simplemente agregue ,encoding=’latin1′ y funcionará

¿Ha sido útil esta solución?