HOWTO · Python
Convertir une chaîne en binaire en Python
Découvrez comment représenter en binaire les points de code Unicode d’une chaîne ou les octets obtenus avec l’encodage de texte de votre choix.
Sur cette page
Choisissez la représentation qui correspond à votre besoin : ord() renvoie le point de code Unicode de chaque caractère, tandis que l’encodage préalable de la chaîne produit des octets selon un encodage de texte choisi. Pour certains textes, ces séquences diffèrent. Utilisez format(value, "b") pour obtenir des chiffres binaires sans préfixe, ou bin(value) pour ajouter le préfixe 0b.
Convertir le point de code Unicode de chaque caractère en binaire avec ord() et format()
Utilisez ord() pour obtenir le point de code Unicode d’un caractère, puis format() avec le spécificateur b pour représenter cet entier en base deux. Cette méthode représente les points de code ; elle n’encode pas la chaîne en octets UTF-8. Les chiffres ne sont pas complétés jusqu’à une largeur fixe.
Pour la chaîne Python, cet exemple exécutable formate le point de code de chaque caractère et joint les valeurs avec des espaces :
text = "Python"
binary_code_points = " ".join(format(ord(character), "b") for character in text)
print(binary_code_points)
Convertir les octets d’une chaîne encodée en binaire avec bytearray() et format()
Pour représenter des octets encodés, choisissez d’abord un encodage et transmettez-le à bytearray(). Le type intégré bytearray() permet d’itérer sur les valeurs d’octet obtenues ; format(value, "08b") affiche chaque octet sous la forme de huit chiffres binaires. UTF-8 utilise plusieurs octets pour de nombreux caractères : la séquence peut donc contenir plus de valeurs que la chaîne source ne compte de caractères.
Cet exemple encode café en UTF-8 et formate chaque octet :
text = "café"
encoded_bytes = bytearray(text, "utf-8")
binary_bytes = " ".join(format(value, "08b") for value in encoded_bytes)
print(binary_bytes)
Utiliser map() et bin() pour produire des valeurs d’octet préfixées
map() applique une conversion à chaque élément d’un itérable ; cette fonction n’encode pas une chaîne à elle seule. Ici, bytearray() encode d’abord le texte en UTF-8, puis map(bin, ...) convertit chaque valeur d’octet obtenue. Contrairement à format(value, "b"), bin() ajoute le préfixe 0b. Si votre format de sortie ne doit contenir que des chiffres, supprimez ce préfixe avec format().
text = "Python"
binary_bytes = " ".join(map(bin, bytearray(text, "utf-8")))
print(binary_bytes)
N’utiliser l’encodage ASCII que pour du texte ASCII
ASCII est un encodage qui prend en charge un jeu de caractères limité. Il convient à un texte comme Python, mais ne peut pas encoder des caractères tels que é ; appeler .encode("ascii") sur un tel texte déclenche une UnicodeEncodeError. Pour du texte Unicode général, utilisez UTF-8 lorsque vous avez besoin d’une représentation en octets. Python ne convertit pas automatiquement une chaîne en octets UTF-8 : indiquez l’encodage souhaité.
Pour du texte composé uniquement de caractères ASCII, le même schéma de formatage des octets fonctionne avec l’encodage ASCII explicite :
text = "Python"
encoded_bytes = text.encode("ascii")
binary_bytes = " ".join(format(value, "08b") for value in encoded_bytes)
print(binary_bytes)