HOWTO · Python
Converti una stringa in binario in Python
L’articolo mostra i valori binari dei punti di codice Unicode oppure dei byte ottenuti con una codifica di testo scelta.
In questa pagina
Scegli la rappresentazione più adatta al tuo scopo: ord() restituisce il punto di codice Unicode di ogni carattere, mentre codificare prima la stringa produce byte secondo una codifica di testo scelta. Per alcuni testi si ottengono sequenze diverse. Usa format(value, "b") per avere cifre binarie senza prefisso, oppure bin(value) se vuoi il prefisso 0b.
Convertire in binario il punto di codice Unicode di ogni carattere con ord() e format()
Usa ord() per ottenere il punto di codice Unicode di un carattere, poi usa format() con lo specificatore di formato b per esprimere quell’intero in base due. Questa rappresentazione riguarda i punti di codice: non codifica la stringa in byte UTF-8. Le cifre non sono completate fino a una larghezza fissa.
Per la stringa Python, questo esempio eseguibile formatta ogni punto di codice e unisce i valori con spazi:
text = "Python"
binary_code_points = " ".join(format(ord(character), "b") for character in text)
print(binary_code_points)
Convertire in binario i byte della stringa codificata con bytearray() e format()
Per rappresentare i byte codificati, scegli prima una codifica e passala a bytearray(). Il tipo incorporato bytearray() permette di iterare sui valori dei byte risultanti; format(value, "08b") mostra ogni byte con otto cifre binarie. UTF-8 usa più byte per molti caratteri, quindi questa sequenza può contenere più valori rispetto al numero di caratteri della stringa originale.
Questo esempio codifica café in UTF-8 e formatta ogni byte:
text = "café"
encoded_bytes = bytearray(text, "utf-8")
binary_bytes = " ".join(format(value, "08b") for value in encoded_bytes)
print(binary_bytes)
Usare map() e bin() per ottenere valori di byte con prefisso
map() applica una conversione a ogni elemento di un iterabile; da solo non codifica una stringa. In questo caso, bytearray() codifica prima il testo in UTF-8 e map(bin, ...) converte ciascun valore di byte risultante. A differenza di format(value, "b"), bin() include il prefisso 0b. Se il formato di output richiede solo le cifre, puoi rimuovere il prefisso con format().
text = "Python"
binary_bytes = " ".join(map(bin, bytearray(text, "utf-8")))
print(binary_bytes)
Usare la codifica ASCII solo per il testo ASCII
ASCII è una codifica che supporta un insieme limitato di caratteri. Va bene per testi come Python, ma non può codificare caratteri come é: chiamare .encode("ascii") su un testo del genere genera UnicodeEncodeError. Quando ti serve una rappresentazione in byte per testo Unicode generico, usa UTF-8. Python non converte automaticamente una stringa in byte UTF-8: specifica la codifica desiderata.
Per il testo composto solo da caratteri ASCII, lo stesso schema di formattazione dei byte funziona specificando la codifica ASCII:
text = "Python"
encoded_bytes = text.encode("ascii")
binary_bytes = " ".join(format(value, "08b") for value in encoded_bytes)
print(binary_bytes)