En pocas palabras, Python 3 generará una excepción TypeError cuando intente codificar una cadena sin especificar específicamente el formato de codificación (Windows -1255, UTF-8, UTF-16, etc.).
Reproduciendo la excepción de error de tipo
Tiene una cadena de Python que ha leído de un archivo, una serie de pandas o un marco de datos, una API web o una base de datos y le gustaría serializarla para almacenarla en el disco o en la memoria para un procesamiento más rápido y eficiente. Aún así, es posible que desee convertir sus bytes en cadenas para acceder a los métodos de manipulación de cadenas que son mucho más amplios que los admitidos por el objeto de bytes.
Llamas a las funciones bytes() o bitarray() y pasas tu cadena como parámetro:
my_str="This is a Python string." my_bytes = bytes(my_str) # this will throw the typeerror exception my_byte_array = bytearray(my_str) # also this line will raise a typeerror
Esto conducirá a la siguiente excepción: captura de pantalla de Jupyter, pero un error similar en cualquier IDE de Python como PyCharm, VS Code, etc.:
Arreglando la cadena sin error de codificación
Para solucionar este error debes pasar el formato de codificación a la función bytes() o bytes_array(). Esto también es muy importante al decodificar los bytes de vuelta a la cadena.
Ejemplo:
my_bytes = bytes(my_str, 'windows-1255') print (my_bytes)
El código escrito arriba generará el siguiente objeto de bytes:
b'This is a Python string.'
Considerando que, codificando con UTF-16:
my_bytes = bytes(my_str, 'UTF-16') print (my_bytes)
Devolverá lo siguiente:
b'\xff\xfeT\x00h\x00i\x00s\x00 \x00i\x00s\x00 \x00a\x00 \x00P\x00y\x00t\x00h\x00o\x00n\x00 \x00s\x00t\x00r\x00i\x00n\x00g\x00.\x00'
¡Espero eso ayude!