Python UnicodeDecodeError: el códec ASCII no puede decodificar el byte en la posición: ordinal fuera del rango
- Error de decodificación Unicode en Python
- Cómo resolver el error de decodificación Unicode en Python
En este artículo aprenderemos a resolver el UnicodeDecodeError
que se produce durante la ejecución del código. Veremos las diferentes razones que causan este error.
También encontraremos formas de resolver este error en Python. Comencemos con lo que es el UnicodeDecodeError
en Python.
Error de decodificación Unicode en Python
Si se enfrenta a un UnicodeDecodeError
recurrente y no está seguro de por qué sucede o cómo resolverlo, este es el artículo para usted.
En este artículo, profundizamos sobre por qué aparece este error y un enfoque simple para resolverlo.
Causas del error de decodificación Unicode en Python
En Python, el UnicodeDecodeError
aparece cuando usamos un tipo de códec para intentar decodificar bytes que ni siquiera fueron codificados con este códec. Para ser más específicos, comprendamos este problema con la ayuda de una analogía de cerradura y llave.
Supongamos que creamos un candado que solo se puede abrir con una llave única hecha específicamente para ese candado.
¿Qué sucede cuando intentas abrir esta cerradura con una llave que no fue hecha para esta cerradura? No encajaría.
Vamos a crear el archivo ejemplo.txt
con los siguientes contenidos.
𝘈Ḇ𝖢𝕯٤ḞԍНǏ
hello world
Intentemos decodificar este archivo usando el códec ascii
usando el siguiente código.
Ejemplo 1:
with open("example.txt", "r", encoding="ascii") as f:
lines = f.readlines()
print(lines)
La salida del código:
Traceback (most recent call last):
File "/home/fatina/PycharmProjects/examples/main.py", line 2, in <module>
lines = f.readlines()
File "/usr/lib/python3.10/encodings/ascii.py", line 26, in decode
return codecs.ascii_decode(input, self.errors)[0]
UnicodeDecodeError: 'ascii' codec can't decode byte 0xf0 in position 0: ordinal not in range(128)
Veamos otro ejemplo más sencillo de lo que sucede cuando codificas una cadena con un códec y la decodificas con otro diferente.
Ejemplo 2:
string = "𝘈Ḇ𝖢𝕯٤ḞԍНǏ"
encoded_string = string.encode("utf-8")
decoded_string = encoded_string.decode("ascii")
print(decoded_string)
En este ejemplo, tenemos una cadena codificada con el códec utf-8
, y en la siguiente línea, intentamos decodificar esta cadena con el códec ascii
.
La salida del código:
Traceback (most recent call last):
File "/home/fatina/PycharmProjects/examples/main.py", line 4, in <module>
decoded_string = encoded_string.decode('ascii')
UnicodeDecodeError: 'ascii' codec can't decode byte 0xf0 in position 0: ordinal not in range(128)
Esto sucede porque el contenido del archivo en el ejemplo 1 y la cadena en el ejemplo 2 no fueron codificados usando el códec ascii
, pero intentamos decodificar estos scripts usándolo. Esto da como resultado el UnicodeDecodeError
.
Cómo resolver el error de decodificación Unicode en Python
Resolver este problema es bastante sencillo. Si exploramos la documentación de Python, veremos varios códecs estándar disponibles para ayudarlo a decodificar bytes.
Entonces, si tuviéramos que reemplazar ascii
con el códec utf-8
en los códigos de ejemplo anteriores, habría decodificado con éxito los bytes en example.txt
.
Código de ejemplo:
with open("example.txt", "r", encoding="utf-8") as f:
lines = f.readlines()
print(lines)
La salida del código:
['𝘈Ḇ𝖢𝕯٤ḞԍНǏ\n', 'hello world']
En cuanto al segundo ejemplo, solo necesita hacer lo mismo.
Código de ejemplo:
string = "𝘈Ḇ𝖢𝕯٤ḞԍНǏ"
encoded_string = string.encode("utf-8")
decoded_string = encoded_string.decode("utf-8")
print(decoded_string)
La salida del código:
𝘈Ḇ𝖢𝕯٤ḞԍНǏ
Es importante mencionar que, a veces, es posible que una cadena no se decodifique por completo con un códec.
Entonces, si surge la necesidad, puede desarrollar su programa para ignorar cualquier carácter que no pueda decodificar simplemente agregando el argumento ignorar
como este:
with open("example.txt", "r", encoding="utf-8", errors="ignore") as f:
lines = f.readlines()
print(lines)
Si bien esto omitirá cualquier error que encuentre el compilador al decodificar algunos caracteres, es importante mencionar que esto puede provocar la pérdida de datos.
Esperamos que este artículo le resulte útil para comprender cómo resolver el UnicodeDecodeError
en Python.
My name is Abid Ullah, and I am a software engineer. I love writing articles on programming, and my favorite topics are Python, PHP, JavaScript, and Linux. I tend to provide solutions to people in programming problems through my articles. I believe that I can bring a lot to you with my skills, experience, and qualification in technical writing.
LinkedInArtículo relacionado - Python Error
- Administrar fallas de segmentación en Python
- Archivo <Stdin>, Línea 1, en <Módulo> Error en Python
- Arreglar AttributeError: el objeto 'generador' no tiene atributo 'siguiente' en Python
- Arreglar el comando cl.exe falló: no existe tal archivo o directorio en Windows
- Arreglar NameError: la variable no está definida en Python
- Arreglar Socket.Gaierror: [Errno 8] Nodename ni Servname proporcionado, o desconocido en Python