HOWTO · Python
Converter uma string em binário em Python
Este artigo mostra como representar em binário os pontos de código Unicode de uma string ou os bytes resultantes de uma codificação de texto escolhida.
Nesta página
Escolha a representação adequada à sua tarefa: ord() fornece o ponto de código Unicode de cada caractere; já codificar primeiro a string produz bytes em uma codificação de texto selecionada. Para alguns textos, essas sequências são diferentes. Use format(value, "b") para obter dígitos binários sem prefixo ou bin(value) para incluir o prefixo 0b.
Converter o ponto de código Unicode de cada caractere para binário com ord() e format()
Use ord() para obter o ponto de código Unicode de um caractere e, em seguida, use format() com o especificador de formato b para escrever esse inteiro na base dois. Essa representação corresponde aos pontos de código; ela não codifica a string como bytes UTF-8. Os dígitos não são preenchidos até uma largura fixa.
Para a string Python, este exemplo executável formata cada ponto de código e junta os valores com espaços:
text = "Python"
binary_code_points = " ".join(format(ord(character), "b") for character in text)
print(binary_code_points)
Converter bytes de uma string codificada para binário com bytearray() e format()
Para representar bytes codificados, primeiro escolha uma codificação e passe-a a bytearray(). O tipo integrado bytearray() permite iterar pelos valores de byte resultantes; format(value, "08b") exibe cada byte com oito dígitos binários. O UTF-8 usa vários bytes para muitos caracteres, então essa sequência pode conter mais valores do que a string de origem tem caracteres.
Este exemplo codifica café em UTF-8 e formata cada byte:
text = "café"
encoded_bytes = bytearray(text, "utf-8")
binary_bytes = " ".join(format(value, "08b") for value in encoded_bytes)
print(binary_bytes)
Usar map() e bin() para produzir valores de byte com prefixo
map() aplica uma conversão a cada item de um iterável; por si só, não codifica uma string. Neste exemplo, bytearray() primeiro codifica o texto em UTF-8, e map(bin, ...) converte cada valor de byte resultante. Ao contrário de format(value, "b"), bin() inclui o prefixo 0b. Remova esse prefixo com format() se o formato de saída exigir apenas os dígitos.
text = "Python"
binary_bytes = " ".join(map(bin, bytearray(text, "utf-8")))
print(binary_bytes)
Usar a codificação ASCII somente para texto ASCII
ASCII é uma codificação com um conjunto limitado de caracteres. Ela funciona para textos como Python, mas não consegue codificar caracteres como é; chamar .encode("ascii") com esse tipo de texto gera UnicodeEncodeError. Use UTF-8 para texto Unicode geral quando precisar de uma representação em bytes. O Python não converte uma string automaticamente em bytes UTF-8; especifique a codificação desejada.
Para texto composto apenas por caracteres ASCII, o mesmo padrão de formatação de bytes funciona com a codificação ASCII explícita:
text = "Python"
encoded_bytes = text.encode("ascii")
binary_bytes = " ".join(format(value, "08b") for value in encoded_bytes)
print(binary_bytes)