¿Cuál es la importancia del str.decode() en Python y cómo se usa?

| Última modificación: 11 de diciembre de 2024 | Tiempo de Lectura: 3 minutos

Algunos de nuestros reconocimientos.:

Premios KeepCoding

En programación puede suceder que nos encontremos con cadenas de texto codificadas que necesiten ser convertidas a un formato legible. En este aspecto, str.decode() es una buena opción para lograr este cometido. En el artículo de hoy te enseñaremos qué es y cómo funciona.

str.decode() en Python

¿Qué es str.decode()?

El str.decode() es un método en Python que se usa para convertir cadenas codificadas en formas de bytes, de vuelta a su representación original en texto. Esto quiere decir que es posible que tomes datos previamente codificados en formatos como UTF-8 o ASCII y transformarlos de nuevo en texto que sea legible.

Cabe resaltar que str.decode() fue una función que se usó principalmente en Python 2. Ya en Python 3 el proceso de decodificación se realiza mediante el método bytes.decode(), porque las cadenas de texto en Python son automáticamente Unicode. Veamos su sintaxis:

bytes.decode(encoding='UTF-8', errors='strict')

Varias cosas a resaltar:

  • encoding: Especifica el esquema de codificación que se utilizó originalmente para codificar la cadena. Por defecto, es UTF-8.
  • errors: Define cómo manejar errores de codificación. Las opciones más comunes incluyen:
    • ‘strict’: Lanza un error si hay problemas en la decodificación.
    • ‘ignore’: Ignora los caracteres problemáticos.
    • ‘replace’: Sustituye los caracteres no válidos con un signo de interrogación.
    • ‘backslashreplace’: Reemplaza caracteres problemáticos con su representación escapada (backslash).

¿Cómo funciona str.decode()?

Si queremos entender cómo se usa str.decode() es necesario ver un flujo completo: primero se codifica una cadena en bytes y luego se decodifica. Veamos cómo:

# Codificar una cadena
texto_original = "Hola, ¿cómo estás?"
texto_codificado = texto_original.encode('utf-8')
print("Texto codificado:", texto_codificado)

# Decodificar la cadena
texto_decodificado = texto_codificado.decode('utf-8')
print("Texto decodificado:", texto_decodificado)

El resultado sería:

Texto codificado: b'Hola, \xc2\xbfc\xc3\xb3mo est\xc3\xa1s?'
Texto decodificado: Hola, ¿cómo estás?

🔴 ¿Quieres Aprender a Programar con Python? 🔴

Descubre el Full Stack Jr. Bootcamp - Aprende a Programar desde Cero de KeepCoding. La formación más completa del mercado y con empleabilidad garantizada

👉 Prueba gratis el Bootcamp Aprende a Programar desde Cero por una semana

Como puedes ver, la función decode() convierte los bytes codificados de vuelta al texto original.

Explorando parámetros en str.decode()

El método str.decode() no solo convierte datos, sino que también te permite manejar errores de decodificación de formas específicas. Veamos cómo utilizar el parámetro errors:

  • Opción strict (por defecto)
texto = b'Hola, \xff'
try:
print(texto.decode('utf-8', errors='strict'))
except UnicodeDecodeError as e:
print("Error:", e)

Salida:
Error: ‘utf-8’ codec can’t decode byte 0xff in position 6: invalid start byte

  • Opción ignore
texto = b'Hola, \xff'
print(texto.decode('utf-8', errors='ignore'))

Salida:
Hola,
El carácter problemático se ignora por completo.

  • Opción replace
texto = b'Hola, \xff'
print(texto.decode('utf-8', errors='replace'))

Salida:
Hola, �
El carácter problemático se reemplaza por un signo de interrogación.

  • Opción backslashreplace
texto = b'Hola, \xff'
print(texto.decode('utf-8', errors='backslashreplace'))

Salida:
Hola, \\xff
El carácter problemático se representa en formato escapado.

Decodificación de datos recibidos por una API

Veamos un ejemplo en el que recibes, hipotéticamente, datos de una API en formato JSON codificado como bytes. Puedes decodificar esa información para procesarla del siguiente modo:

import json

# Datos simulados recibidos en bytes
datos = b'{"nombre": "María", "edad": 30}'
# Decodificar los datos
datos_decodificados = datos.decode('utf-8')
# Convertir la cadena decodificada a un diccionario
informacion = json.loads(datos_decodificados)

print("Nombre:", informacion["nombre"])
print("Edad:", informacion["edad"])

Salida:

Nombre: María
Edad: 30

¿Quieres seguir aprendiendo con Keepcoding? El bootcamp en programación desde cero te brinda todas las bases teóricas y prácticas para que forjes tu camino hacia el éxito de manera fácil, rápida y efectiva. Gracias a este bootcamp aprenderás todas las habilidades que un programador principiantes requiere en el mundo laboral. ¡No le des más largas a esta gran oportunidad!

Posts más leídos

¡CONVOCATORIA ABIERTA!

Aprende a programar desde cero

Full Stack JR. Bootcamp

Clases en Directo | Profesores en Activo | Temario 100% actualizado