HOWTO · Python
Konvertieren Sie einen String in Binär in Python
Der Artikel zeigt binäre Werte für die Unicode-Codepoints der Zeichen oder für Bytes in einer gewählten Textkodierung.
Auf dieser Seite
Wählen Sie die Darstellung passend zu Ihrer Aufgabe: ord() liefert den Unicode-Codepoint jedes Zeichens. Wenn Sie den String zuerst kodieren, erhalten Sie Bytes in einer ausgewählten Textkodierung. Bei manchen Texten unterscheiden sich diese Folgen. Mit format(value, "b") erhalten Sie Binärziffern ohne Präfix; bin(value) fügt das Präfix 0b hinzu.
Den Unicode-Codepoint jedes Zeichens mit ord() und format() binär darstellen
Mit ord() ermitteln Sie den Unicode-Codepoint eines Zeichens. Anschließend wandeln Sie diese Ganzzahl mit format() und dem Formatspezifizierer b in eine Binärdarstellung um. Das Ergebnis stellt Codepoints dar; der String wird dabei nicht in UTF-8-Bytes kodiert. Die Binärziffern werden nicht auf eine feste Breite aufgefüllt.
Im folgenden ausführbaren Beispiel werden für den String Python die Codepoints formatiert und ihre Werte durch Leerzeichen getrennt ausgegeben:
text = "Python"
binary_code_points = " ".join(format(ord(character), "b") for character in text)
print(binary_code_points)
Kodierte String-Bytes mit bytearray() und format() binär darstellen
Wenn Sie kodierte Bytes darstellen möchten, wählen Sie zuerst eine Kodierung und übergeben Sie sie an bytearray(). Der eingebaute Typ bytearray() lässt sich über die resultierenden Bytewerte durchlaufen; format(value, "08b") stellt jedes Byte mit acht Binärziffern dar. UTF-8 verwendet für viele Zeichen mehrere Bytes. Daher kann diese Folge mehr Werte enthalten, als der String Zeichen hat.
Dieses Beispiel kodiert café als UTF-8 und formatiert jedes Byte:
text = "café"
encoded_bytes = bytearray(text, "utf-8")
binary_bytes = " ".join(format(value, "08b") for value in encoded_bytes)
print(binary_bytes)
Mit map() und bin() Bytewerte mit Präfix erzeugen
map() wendet eine Umwandlung auf jedes Element eines iterierbaren Objekts an; die Funktion kodiert einen String nicht selbst. Hier kodiert bytearray() den Text zunächst als UTF-8, und map(bin, ...) wandelt anschließend jeden resultierenden Bytewert um. Anders als format(value, "b") fügt bin() das Präfix 0b hinzu. Falls das Ausgabeformat nur Ziffern verlangt, können Sie das Präfix mit format() weglassen.
text = "Python"
binary_bytes = " ".join(map(bin, bytearray(text, "utf-8")))
print(binary_bytes)
ASCII nur für ASCII-Text verwenden
ASCII ist eine Kodierung mit einem begrenzten Zeichensatz. Sie eignet sich für Text wie Python, kann aber keine Zeichen wie é kodieren. Wird .encode("ascii") auf solchen Text angewendet, entsteht ein UnicodeEncodeError. Für allgemeinen Unicode-Text verwenden Sie UTF-8, wenn Sie eine Byte-Darstellung benötigen. Python wandelt einen String nicht automatisch in UTF-8-Bytes um; geben Sie die gewünschte Kodierung ausdrücklich an.
Für Text, der ausschließlich ASCII-Zeichen enthält, funktioniert dasselbe Formatierungsmuster für Bytes auch mit der expliziten ASCII-Kodierung:
text = "Python"
encoded_bytes = text.encode("ascii")
binary_bytes = " ".join(format(value, "08b") for value in encoded_bytes)
print(binary_bytes)