Die eingebaute Funktion bytes() erzeugt unveränderliche Byte-Sequenzen und ist zentral für die Arbeit mit binären Daten in Python — etwa bei Datei‑ und Netzwerk‑I/O, Kryptographie und Kodierungsaufgaben. bytes() lässt sich aus Integer‑Iterables, aus einem bytearray, aus einem Text‑String (mit angegebenem encoding) oder leer mit einer bestimmten Länge erstellen. Da bytes immutable sind, sind sie als schreibgeschützte Puffer und Schlüssel geeignet; für Änderungen muss man vorher in ein bytearray konvertieren. In diesem Artikel behandeln wir Syntax, Erzeugungswege, typische Encoding‑Fallstricke und praxisnahe Beispiele zur effizienten Verarbeitung von Binärdaten.

Einführung

Die bytes Klasse ist einer der eingebauten Datentypen in Python und spielt eine zentrale Rolle bei der Arbeit mit Binärdaten. Sie repräsentiert unveränderliche (immutable) Sequenzen von Bytes und ist essentiell für die Verarbeitung von Rohdaten, Netzwerkkommunikation, Dateioperationen und der Interaktion zwischen verschiedenen Zeichenkodierungen.

Beschreibung

Was ist bytes?

Die bytes Klasse repräsentiert eine unveränderliche Sequenz von Bytes, wobei jedes Byte einen Wert zwischen 0 und 255 (8 Bit) haben kann. Im Gegensatz zu Strings, die Text in Unicode-Zeichen darstellen, arbeitet bytes mit rohen Binärdaten.

Welches Problem wird gelöst?

In der modernen Programmierung müssen wir häufig zwischen verschiedenen Datenrepräsentationen wechseln.

  • Text vs. Binärdaten: Strings sind für Menschen lesbar, aber Computer arbeiten mit Bytes.
  • Zeichenkodierungen: Verschiedene Systeme verwenden unterschiedliche Kodierungen (UTF-8, ASCII, Latin-1, etc.)
  • Netzwerkkommunikation: Daten werden über Netzwerke als Byte-Streams übertragen.
  • Dateioperationen: Binärdateien (Bilder, PDFs, etc.) müssen als Bytes verarbeitet werden.
  • Kryptographie: Verschlüsselung und Hashing arbeiten mit Byte-Daten.

Syntax

Die bytes Klasse hat mehrere Konstruktor-Signaturen.

Die erste Signatur: Leer oder aus verschiedenen Quellen.

Python Syntax
bytes(source=b"")

Die zweite Signatur: Aus String mit Kodierung.

Python Syntax
bytes(source, encoding, errors="strict")

Zusätzliche Möglichkeiten:

Python Syntax
bytes()                         # Leeres byte-Objekt
bytes(integer)                  # Bytes mit Nullen der angegebenen Länge
bytes(iterable)                 # Bytes aus iterierbarem Objekt
bytes(buffer)                   # Bytes aus Objekt mit Buffer-Protokoll
bytes(string, encoding)         # Bytes aus String
bytes(string, encoding, errors) # Bytes aus String mit Fehlerbehandlung
Parameter
source

Der source Parameter kann verschiedene Typen annehmen (siehe weiter unten)

encoding

Gibt die Zeichenkodierung an, die verwendet werden soll

errors

Definiert, wie mit Kodierungsfehlerns umgegangen werden soll

Parameter-Beschreibung

Im Folgenden werden die Parameter etwas genauer beschrieben/erklärt.

Parameter source

Dieser Parameter kann verschiedene Typen annehmen.

Keine Angabe oder b''

  • Erzeugt ein leeres bytes Objekt
  • Standard-Fallback-Wert
Python
my_bytes = bytes()
my_bytes = bytes(b"")

Integer

  • Erzeugt ein bytes Objekt der angegebenen Länge
  • Alle Bytes werden mit Nullen initialisiert
  • Der Integer muss nicht-negativ sein
Python
my_bytes = bytes(4) # b'\x00\x00\x00\x00'

Iterable von Integers

  • Jedes Element muss ein Integer zwischen 0 und 255 sein
  • Erzeugt ein bytes Objekt mit diesen Werten
Python
bytes([2, 4, 6]) # b'\x02\x04\x06'

String (nur mit Encoding)

  • Wandelt einen String in Bytes um
  • Erfordert den encoding Parameter
  • Der String wird gemäß der angegebenen Kodierung in Bytes übersetzt
Python
my_bytes = bytes("Hello", "utf-8") # b'Hello'

Objekt mit Buffer-Protokoll

  • Andere bytes, bytearray oder buffer-unterstützende Objekte
  • Erstellt eine Kopie der Bytes

Parameter encoding

Dieser Parameter gibt die Zeichenkodierung an, die verwendet werden soll.

Folgende Werte sind unter Anderem möglich:

  • utf-8: Unicode-Kodierung (Standard für moderne Anwendungen)
  • ascii: 7-Bit ASCII (nur 0-127)
  • latin-1 oder iso-8859-1: 8-Bit westeuropäische Zeichen
  • utf-16, utf-32: Andere Unicode-Kodierungen
  • cp1252: Windows Western European

Viele weitere sind verfügbar.

Parameter errors

Mit diesem Parameter wird definiert, wie mit Kodierungsfehlern umgegangen werden soll.

Folgende Werte sind möglich:

  • strict: Wirft UnicodeEncodeError bei ungültigen Zeichen (Standard)
  • ignore: Ignoriert ungültige Zeichen
  • replace: Ersetzt ungültige Zeichen durch ein Ersatzzeichen
  • xmlcharrefreplace: Ersetzt durch XML-Zeichen-Referenz
  • backslashreplace: Ersetzt durch Backslash-Escape-Sequenzen
  • namereplace: Ersetzt durch \N{...} Escape-Sequenzen

Rückgabewert

Die bytes() Funktion gibt es unveränderliches bytes Objekt zurück.

Dieses Objekt:

  • Ist eine Sequenz von Bytes (Werte 0 - 255)
  • Ist immutable (unveränderlich)
  • Kann indexiert und gesliced werden
  • Unterstützt viele String-ähnliche Methoden
  • Hat einen anderen Typ als str und bytearray

Unveränderlichkeit

Ein bytes Objekt kann nach der Erstellung nicht mehr verändert werden. Dies unterscheidet es von bytearray, dem veränderbaren Pendant.

Dieses Unveränderlichkeit macht bytes hashbar (kann als Dictionary-Key verwendet werden) und thread-safe, führt aber dazu, dass jede “Änderung” ein neues Objekt erstellt.

Python Beispiel
b = bytes([60, 70, 80])
b[0]= 100
Output
TypeError: 'bytes' object does not support item assignment

Literal-Syntax

Python bietet eine spezielle Literal-Syntax für bytes. Das b-Präfix vor einem String-Literal erzeugt direkt ein bytes Objekt. Nur ASCII-Zeichen (0-127) sind in Literalen erlaubt, andere Zeichen müssen escaped werden.

Das ist möglich.

Python Beispiel
b1 = b"Hallo Python"
b2 = b"Coding"
b3 = b"""Multi
line of
code"""

print(b1)
print(b2)
print(b3)
Output
b'Hallo Python'
b'Coding'
b'Multi\nline of\ncode'

Hier kriegen wir einen Fehler aufgrund von ö.

Python Beispiel
b = b"Python is schön"
Output
SyntaxError: bytes can only contain ASCII literal characters

Darstellung und Ausgabe

Die String-Repräsentation von bytes zeigt lesbare ASCII-Zeichen als Text und andere als Hex-Werte.

Python Beispiel
b = bytes([72, 101, 108, 108, 111, 32, 255, 0, 10])
print(b)
Output
b'Hello \xff\x00\n'
  • ASCII-Zeichen (32-126) werden als Zeichen dargestellt. (Hello)
  • Nicht-druckbare Zeichen als Hex: \xff (255) und \x00 (0)

Praktische Beispiele

Konvertierung zwischen bytes und str

Die Umwandlung zwischen Text (str) und Binärdaten (bytes) ist eine der häufigsten Operationen.

Python Beispiel
text = "Hallo Welt 🌍"

b1 = text.encode("utf-8")
print(b1)

b2 = bytes(text, "utf-8")
print(b2)

text_back = b1.decode("utf-8")
print(text_back)
Output
b'Hallo Welt \xf0\x9f\x8c\x8d'
b'Hallo Welt \xf0\x9f\x8c\x8d'
Hallo Welt 🌍

Kurze Ausführungen zu diesem Beispiel.

  • Das Emoji 🌍 wird in UTF-8 als 4 Bytes kodiert: \xf0\x9f\x8c\x8d
  • encode() ist eine String-Methode, während bytes() ein Konstruktor ist
  • decode() ist eine Umkehrung und wandelt Bytes zurück in String um
  • Beide Richtungen benötigen die Angabe einer Kodierung

Fehlerbehandlung

Nun schauen wir uns an, wie man mit Encoding-Fehlern umgehen kann.

Zuerst versuchen wir den Fehler abzufangen.

Python Beispiel
text = "Café"

try:
    b = bytes(text, "ascii")
except UnicodeEncodeError as e:
    print(f"Fehler: {e}")
Output
Fehler: 'ascii' codec can't encode character '\xe9' in position 3: ordinal not in range(128)

Der Buchstabe é kann nicht mittels ASCII korrekt ausgegeben bzw. interpretiert werden. Deswegen wird hier der Fehler geworfen.

Im nächsten Beispiel schauen wir uns an, wie wir den Fehler einfach ignorieren können und nur das ausgeben, was korrekt verarbeitet werden kann.

Python Beispiel
text = "Café"

b_with_ignore = bytes(text, "ascii", errors="ignore")
print(b_with_ignore)
Output
b'Caf'

Wie wir hier sehen, wir der Buchstabe é einfach ignoriert.

Wir können auch Zeichen, welche bei einer bestimmten Kodierung nicht korrekt verarbeitet werden, durch ein Zeichen ersetzen.

Python Beispiel
text = "Café"

b_with_replace = bytes(text, "ascii", errors="replace")
print(b_with_replace)
Output
b'Caf?s'

Leere Objekte

Werfen wir einen Blick auf die Erstellung von leeren Objekten mit bytes().

Python Beispiel
b1 = bytes()
b2 = bytes(b"")
b3 = b""

print(b1)
print(len(b1))
print(b1 == b2 == b3)
print(type(b1))
Output
b''
0
True
<class 'bytes'>
/ Weiter

Zurück zu Builtin Functions

Zur Übersicht