Direkt zum Inhalt

Wie man in Python Strings in Bytes umwandelt

In Python konvertierst du einen String mit der Methode .encode() in Bytes und gibst optional die gewünschte Kodierung an (standardmäßig UTF-8).
Aktualisierte 16. Jan. 2025  · 7 Min. Lesezeit

Strings stellen für Menschen lesbaren Text dar und sind einer der grundlegendsten und wichtigsten Datentypen in der Computerprogrammierung. Jedes Zeichen in einer Textkette wird jedoch durch ein oder mehrere Bytes binärer Daten dargestellt. Anwendungen wie Ein- und Ausgabeoperationen und Datenübertragungen erfordern die Umwandlung von Zeichenketten in Bytes unter Verwendung einer bestimmten Kodierung.

In diesem Lernprogramm lernst du, wie du in Python Strings in Bytes umwandeln kannst. Wenn du dich für die umgekehrte Operation interessierst, schau dir mein Tutorial auf an, in dem ich zeige, wie man in Python Bytes in Strings umwandelt.

Bevor wir ins Detail gehen, lass uns mit einer kurzen Antwort für diejenigen unter euch beginnen, die es eilig haben.

Kurze Antwort: Wie man in Python Strings in Bytes umwandelt

In Python ist es ganz einfach, eine Zeichenkette mit der eingebauten Methode .encode() in Bytes umzuwandeln:

my_string = "Hello, world!"
bytes_representation = my_string.encode(encoding="utf-8")  
# Optional: Specify the desired encoding (UTF-8 is the default)

print(bytes_representation)
# Output: b'Hello, world!'

Die Methode .encode() gibt ein neues Bytes-Objekt zurück, das die kodierte Version des ursprünglichen Strings darstellt. Standardmäßig wird die UTF-8-Kodierung verwendet, aber du kannst bei Bedarf auch andere Kodierungen wie 'ascii' oder 'latin-1' angeben.

Schauen wir uns diesen Umwandlungsprozess genauer an.

Verstehen von Strings und Bytes in Python

Zwei der wichtigsten eingebauten Datentypen in Python sind str und bytes. Diese Datentypen haben gemeinsame Merkmale, aber auch wichtige Unterschiede.

Sowohl str als auch bytes sind unveränderliche Sequenzen, ​Das bedeutet, dass wir ihre Elemente nach der Erstellung nicht mehr ändern können. Ein String ist eine unveränderliche Folge von Zeichen, während ein bytes Objekt eine unveränderliche Folge von Ganzzahlen zwischen 0 und 255 ist. Dieser Bereich ganzer Zahlen kann mit 8 Bits dargestellt werden, was einem Byte entspricht. Ein bytes Objekt ist also eine Folge von Bytes.

ASCII-Zeichenkodierung

Betrachten wir zuerst die ASCII-Zeichen. ASCII (American Standard Code for Information Interchange) ist eine Zeichenkodierung, die nur 128 Zeichen enthält. Daher kann jedes ASCII-Zeichen durch sieben Bits dargestellt werden, was weniger ist als ein einzelnes Byte.

Wir können ein bytes Objekt erstellen, indem wir b vor die einfachen, doppelten oder dreifachen Anführungszeichen setzen, die wir normalerweise für Strings verwenden:

word_as_bytes = b"Python"
print(word_as_bytes)
print(type(word_as_bytes))
b'Python'
<class 'bytes'>

Obwohl der Code die Zeichen in der Schreibweise von Python anzeigt, ist jedes Element im bytes Objekt eine ganze Zahl zwischen 0 und 255:

print(word_as_bytes[0])
print(list(word_as_bytes))
80
[80, 121, 116, 104, 111, 110]

Das erste Element von word_as_bytes ist die Ganzzahl 80, die den ASCII-Code für den Großbuchstaben P darstellt:

print(chr(80))
P

Wenn du word_as_bytes in eine Liste umwandelst, enthält die Liste die Ganzzahlen, die jedes Byte repräsentieren. Die ganzen Zahlen sind die ASCII-Codes für die Buchstaben des Wortes Python.

Der ASCII-Zeichensatz ist jedoch begrenzt.

UTF-8 Zeichencodierung

Die häufigste Zeichenkodierung ist UTF-8, eine 8-Bit-Unicode-Kodierung. Die 128 ASCII-Zeichen werden in UTF-8 durch dieselben ganzen Zahlen dargestellt, aber auch andere Zeichen können mit zwei oder mehr Bytes für jedes Zeichen dargestellt werden.

Lass uns ein bytes Objekt mit Nicht-ASCII-Zeichen erstellen. Wir müssen den bytes() Konstruktor verwenden:

word_as_bytes = bytes("café", "utf-8")
print(word_as_bytes)
b'caf\xc3\xa9'

Das Objekt bytes zeigt direkt die ersten drei Buchstaben von café an. Das akzentuierte é ist jedoch kein ASCII-Zeichen, sondern wird durch zwei Bytes dargestellt, die als \xc3 und \xa9 angezeigt werden. Diese Bytes stehen für die Hexadezimalzahlen c3 und a9, die den ganzen Zahlen 195 und 169 entsprechen. Diese beiden Bytes zusammen stehen für é in UTF-8:

print(len(word_as_bytes))
print(list(word_as_bytes))
5
[99, 97, 102, 195, 169]

Ein fünfgliedriges bytes Objekt repräsentiert die Zeichenkette mit vier Buchstaben.

Strings in Bytes umwandeln: Die Methode encode()

Zuvor haben wir den bytes() Konstruktor verwendet, um einen Textstring in ein bytes Objekt umzuwandeln. Eine gängigere Methode, um Python-Strings in Bytes umzuwandeln, ist die .encode() String-Methode, die Kontrolle über die Kodierung und Fehlerbehandlung bietet. Diese Methode gibt ein bytes Objekt zurück, das die Zeichenkette darstellt:

word_as_bytes = "Hello Python!".encode()
​print(word_as_bytes)
print(type(word_as_bytes))
b'Hello Python!'
<class 'bytes'>

Die Methode .encode() verwendet standardmäßig die Kodierung UTF-8. UTF-8 ist das am weitesten verbreitete Kodierungsformat und unterstützt eine viel breitere Palette von Zeichen als ASCII. UTF-8 stellt jedes Zeichen mit einer Folge von ein, zwei, drei oder vier Byte-Einheiten dar.

Wir können .encode() mit einer alternativen Kodierung als Argument aufrufen:

word_as_bytes = "Hello Python!".encode("utf-16")
print(word_as_bytes)
b'\xff\xfeH\x00e\x00l\x00l\x00o\x00 \x00P\x00y\x00t\x00h\x00o\x00n\x00!\x00'

Das bytes Objekt ist in diesem Fall anders, da es die UTF-16 Kodierung desselben Textstrings darstellt.

Kodierungsfehler

Da nicht alle Kodierungen alle Zeichen enthalten, können beim Kodieren einer Zeichenkette in ein bytes Objekt Fehler auftreten.

Betrachten wir die Zeichenfolge "Café • £2.20", die drei Nicht-ASCII-Zeichen enthält. Wir können dies mit der Standardkodierung UTF-8 kodieren:

word_as_bytes = "Café • £2.20".encode()
print(word_as_bytes)
b'Caf\xc3\xa9 \xe2\x80\xa2 \xc2\xa32.20'

Die Nicht-ASCII-Zeichen werden durch ihre hexadezimalen Escape-Sequenzen ersetzt. .encode() gibt jedoch einen Fehler aus, wenn dieselbe Zeichenkette mit ASCII kodiert wird, da einige Zeichen in der ASCII-Kodierung nicht vorhanden sind:

word_as_bytes = "Café • £2.20".encode("ascii")
print(word_as_bytes)
Traceback (most recent call last):
...
word_as_bytes = "Café • £2.20".encode("ascii")
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
UnicodeEncodeError: 'ascii' codec can't encode character '\xe9' in position 3: ordinal not in range(128)

Die Methode .encode() string hat einen Parameter errors, der den Standardwert "strict" hat. Das Argument "strict" zwingt .encode() dazu, eine UnicodeEncodeError auszugeben, wenn ein Zeichen nicht kodiert werden kann.

Es gibt jedoch auch andere Möglichkeiten, Fehler zu behandeln. Eine Möglichkeit ist, die Fehler mit dem Argument "ignore" zu ignorieren:

word_as_bytes = "Café • £2.20".encode("ascii", errors="ignore")
print(word_as_bytes)
b'Caf 2.20'

Diese Option löst keinen Fehler aus. Stattdessen gibt .encode() ein bytes Objekt zurück, und das akzentuierte é, der Aufzählungspunkt und das Pfundzeichen werden weggelassen.

Eine andere Möglichkeit ist, die Zeichen, die nicht kodiert werden können, durch etwas anderes zu ersetzen. Es gibt mehrere Ersatzoptionen. Eines davon ist das errors="replace" Argument:

word_as_bytes = "Café • £2.20".encode("ascii", errors="replace")
print(word_as_bytes)
b'Caf? ? ?2.20'

Die drei Nicht-ASCII-Zeichen, die in diesem Beispiel nicht kodiert werden können, werden durch ein Fragezeichen ersetzt. Deshalb wird jedes fehlende Zeichen durch ein anderes einzelnes Zeichen ersetzt, das als Platzhalter dient.

Wir können auch die fehlenden Zeichen durch informativeren Text ersetzen:

word_as_bytes = "Café • £2.20".encode("ascii", errors="backslashreplace")
print(word_as_bytes)
b'Caf\\xe9 \\u2022 \\xa32.20'

Der Aufruf von .encode() mit errors="backslashreplace" ersetzt die Zeichen, die nicht kodiert werden können, durch ihre hexadezimalen Escape-Sequenzen. Die hexadezimale Zahl e9 steht für das akzentuierte é. Der Aufzählungspunkt ist das Unicode-Zeichen u2022, und die Hexadezimalzahl a3 steht für das Pfundzeichen.

Wir können auch "xmlcharrefreplace" verwenden, um die fehlenden Zeichen durch ihren XML-Code zu ersetzen:

word_as_bytes = "Café • £2.20".encode("ascii", errors="xmlcharrefreplace")
print(word_as_bytes)
b'Caf&#233; &#8226; &#163;2.20'

Eine andere Möglichkeit ist, ungültige Zeichen durch ihren formalen Namen zu ersetzen, indem du errors="namereplace" verwendest:

word_as_bytes = "Café • £2.20".encode("ascii", errors="namereplace")
print(word_as_bytes)
b'Caf\\N{LATIN SMALL LETTER E WITH ACUTE} \\N{BULLET} \\N{POUND SIGN}2.20'

Verschiedene Situationen können eine maßgeschneiderte Fehlerbehandlung erfordern, und die Methode .encode() string bietet mehrere Optionen für den Umgang mit Zeichen, die nicht kodiert werden können.

Anwendungen der String-to-Byte-Konvertierung in der Datenwissenschaft

Die Umwandlung von Zeichenketten in Bytes ist eine grundlegende Operation, die in verschiedenen Bereichen der Datenwissenschaft Anwendung findet:

  • Natürliche Sprachverarbeitung (NLP): Wenn wir mit Textdaten für Aufgaben wie Stimmungsanalyse, Themenmodellierung oder maschinelle Übersetzung arbeiten, verarbeiten wir den Text oft vor, indem wir ihn in Wörter oder Unterwörter zerlegen. Dieser Tokenisierungsprozess beinhaltet häufig die Umwandlung von Zeichenketten in Bytefolgen zur effizienten Darstellung und Bearbeitung.
  • Datenbereinigung und Vorverarbeitung: Operationen auf Byte-Ebene können nützlich sein, um Textdaten zu bereinigen, z. B. um ungültige Zeichen zu entfernen oder Text auf der Grundlage bestimmter Bytemuster zu normalisieren.
  • Feature Engineering: In einigen Fällen können Merkmale auf Byte-Ebene (z. B. n-Gramme von Bytes) aus Textdaten extrahiert und als Eingangsmerkmale für maschinelle Lernmodelle verwendet werden.
  • Web Scraping und Datenextraktion: Beim Scraping von Daten aus Websites erhalten wir oft HTML- oder andere textbasierte Inhalte, die geparst und auf Byte-Ebene verarbeitet werden müssen, um relevante Informationen zu extrahieren.
  • Datenkompression: Bestimmte Datenkomprimierungsalgorithmen arbeiten mit Byte-Sequenzen, so dass die Umwandlung von Zeichenketten in Bytes ein notwendiger Schritt vor der Anwendung von Komprimierungsverfahren sein kann.

Das Verständnis dieser Anwendungen kann uns helfen, Situationen zu erkennen, in denen die Umwandlung von Strings in Bytes nützlich sein kann.

Fazit

Strings sind Folgen von für Menschen lesbaren Zeichen. Diese Zeichen werden als Bytes von Binärdaten kodiert, die in einem bytes Objekt gespeichert werden können. Ein bytes Objekt ist eine Folge von Ganzzahlen, wobei jede Ganzzahl ein Byte darstellt.

Anwendungen erfordern, dass Strings in bytes Objekte umgewandelt werden. Diese können wir entweder mit dem bytes() Konstruktor oder der String .encode() Methode umwandeln. Die Beherrschung der Konvertierung zwischen Strings und Bytes ermöglicht eine flexiblere Datenmanipulation.

Du kannst dein Python-Lernen mit den folgenden Tutorials und Kursen fortsetzen:

FAQs zur Umwandlung von Strings in Bytes

Was ist der Unterschied zwischen str und bytes?

Ein String ist eine unveränderliche Folge von Zeichen, während ein bytes Objekt eine unveränderliche Folge von ganzen Zahlen ist. Jede ganze Zahl steht für ein Byte.

Soll ich bytes() oder str.encode() verwenden, um einen String in Bytes umzuwandeln?

Die Methode str.encode() ist die bevorzugte Methode, um Strings in Python in Bytes umzuwandeln. Sie bietet Klarheit und Flexibilität bei der Wahl der Kodierungs- und Fehlerbehandlungsstrategie. Der bytes() Konstruktor kann in bestimmten Szenarien verwendet werden, in denen str.encode() nicht direkt anwendbar ist.


Stephen Gruppetta's photo
Author
Stephen Gruppetta
LinkedIn
Twitter

Ich habe Physik und Mathematik auf UG-Ebene an der Universität Malta studiert. Dann zog ich nach London und machte meinen Doktor in Physik am Imperial College. Ich habe an neuartigen optischen Techniken zur Abbildung der menschlichen Netzhaut gearbeitet. Jetzt konzentriere ich mich darauf, über Python zu schreiben, über Python zu kommunizieren und Python zu unterrichten.

Themen

Lerne Python mit diesen Kursen!

Zertifizierung verfügbar

Kurs

Einführung in Python

4 hr
5.9M
Beherrsche die Grundlagen der Datenanalyse mit Python in nur vier Stunden. Dieser Online-Kurs führt in die Python-Schnittstelle ein und stellt beliebte Pakete vor.
Siehe DetailsRight Arrow
Kurs starten
Mehr anzeigenRight Arrow