Lingua-e
Python

¿Qué significa UnicodeDecodeError?

← Errores

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

Python

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 byte

Có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