Un UnicodeDecodeError se lanza cuando Python intenta decodificar una secuencia de bytes en un string usando una codificación determinada (como UTF-8) pero encuentra bytes que no son válidos para esa codificación. Es común al leer archivos guardados con un conjunto de caracteres diferente.
Por qué ocurre
- •Abrir un archivo guardado con codificación Latin-1 o Windows-1252 cuando Python usa UTF-8 por defecto.
- •Leer un archivo binario (imagen, PDF, ejecutable) como si fuera texto plano.
- •Un archivo que mezcla codificaciones, por ejemplo un archivo UTF-8 con algunos caracteres codificados en un sistema legado.
- •Datos de red o contenido de base de datos que contienen bytes fuera del rango ASCII.
Ejemplos
Código que causa el error
with open("report.csv") as f:
content = f.read()Error en la terminal
Traceback (most recent call last):
File "app.py", line 2, in <module>
content = f.read()
UnicodeDecodeError: 'utf-8' codec can't decode byte 0xe9 in position 42: invalid continuation byteCómo solucionarlo
Especifica siempre la codificación explícitamente al abrir archivos: open('archivo.txt', encoding='utf-8'). Si la codificación es desconocida, usa la librería chardet para detectarla. Pasa errors='replace' o errors='ignore' como último recurso cuando la pérdida de datos es aceptable.
Código corregido
# Specify the correct encoding, or use errors='replace' as a fallback
with open("report.csv", encoding="latin-1") as f:
content = f.read()
# If encoding is unknown, detect it first:
# pip install chardet
import chardet
raw = open("report.csv", "rb").read()
detected = chardet.detect(raw)
print(detected["encoding"]) # e.g. 'ISO-8859-1'Errores relacionados
¿Listo para practicar tu inglés en el trabajo?
Lingua-e tiene ejercicios interactivos basados en conversaciones reales de developers: standups, code reviews, retrospectivas y más. Practica hasta que salga solo.
Prueba Lingua-e gratis