HOWTO · Python

Convertir una cadena en binario en Python

Muestra cómo obtener valores binarios para puntos de código Unicode o para bytes en una codificación de texto elegida.

En esta página

Elige la representación que se ajuste a tu tarea: ord() obtiene el punto de código Unicode de cada carácter, mientras que primero codificar la cadena produce bytes en una codificación de texto seleccionada. Para algunos textos, estas son secuencias distintas. Usa format(value, "b") para obtener dígitos binarios sin prefijo, o bin(value) si quieres el prefijo 0b.

Convierte el punto de código Unicode de cada carácter a binario con ord() y format()

Usa ord() para obtener el punto de código Unicode de un carácter y luego format() con el especificador de formato b para escribir ese entero en base dos. Esto representa puntos de código; no codifica la cadena como bytes UTF-8. Los dígitos no se rellenan hasta alcanzar una longitud fija.

Para la cadena Python, este ejemplo ejecutable da formato a cada punto de código y une los valores con espacios:

text = "Python"
binary_code_points = " ".join(format(ord(character), "b") for character in text)
print(binary_code_points)

Convierte los bytes de una cadena codificada a binario con bytearray() y format()

Para representar bytes codificados, primero elige una codificación y pásala a bytearray(). El tipo integrado bytearray() permite recorrer los valores de bytes resultantes; format(value, "08b") muestra cada byte con ocho dígitos binarios. UTF-8 utiliza varios bytes para muchos caracteres, por lo que esta secuencia puede contener más valores que caracteres tiene la cadena original.

Este ejemplo codifica café como UTF-8 y da formato a cada byte:

text = "café"
encoded_bytes = bytearray(text, "utf-8")
binary_bytes = " ".join(format(value, "08b") for value in encoded_bytes)
print(binary_bytes)

Usa map() y bin() para obtener valores de bytes con prefijo

map() aplica una conversión a cada elemento de un iterable; por sí solo, no codifica una cadena. En este caso, bytearray() codifica primero el texto como UTF-8 y map(bin, ...) convierte cada valor de byte resultante. A diferencia de format(value, "b"), bin() incluye el prefijo 0b. Si el formato de salida requiere solo los dígitos, elimina ese prefijo con format().

text = "Python"
binary_bytes = " ".join(map(bin, bytearray(text, "utf-8")))
print(binary_bytes)

Usa la codificación ASCII solo para texto ASCII

ASCII es una codificación para un conjunto limitado de caracteres. Sirve para texto como Python, pero no puede codificar caracteres como é; llamar a .encode("ascii") con ese texto genera un error UnicodeEncodeError. Si necesitas una representación en bytes de texto Unicode general, usa UTF-8. Python no convierte automáticamente una cadena en bytes UTF-8: especifica la codificación que quieras.

Para texto compuesto únicamente por caracteres ASCII, el mismo patrón de formato de bytes funciona si se especifica la codificación ASCII:

text = "Python"
encoded_bytes = text.encode("ascii")
binary_bytes = " ".join(format(value, "08b") for value in encoded_bytes)
print(binary_bytes)