Was bedeutet ein AB-Präfix vor einer Python-Zeichenfolge?

In einem Python-Quellcode stolperte ich über ein kleines b vor einer Zeichenkette wie in:

b"abcdef" 

Ich kenne das Präfix u das eine Unicode-Zeichenfolge angibt, und das Präfix r für ein Zeichenfolgenliteral.

Wofür steht das b und in welcher Art von Quellcode ist es sinnvoll, da es genau wie eine einfache Zeichenfolge ohne Präfix zu sein scheint?

   

Dies ist Python3- bytes Literal . Dieses Präfix fehlt in Python 2.5 und älter (es entspricht einer einfachen Zeichenfolge von 2.x, während die einfache Zeichenfolge von 3.x einem Literal mit einem u Präfix in 2.x entspricht). In Python 2.6+ entspricht es einer einfachen Zeichenfolge, um mit 3.x kompatibel zu sein .

Das Präfix b ein bytes .

Wenn Sie es in Python 3-Quellcode verwendet sehen, erstellt der Ausdruck ein bytes Objekt , kein reguläres Unicode- str Objekt . Wenn Sie sehen, dass es in Ihrer Python-Shell oder als Teil einer Liste, eines dict-Inhalts oder eines anderen Containerinhalts angezeigt wird, sehen Sie ein bytes Objekt, das mit dieser Notation dargestellt wird.

bytes Objekte enthalten im Grunde eine Folge von Ganzzahlen im Bereich von 0 bis 255, aber wenn sie dargestellt werden, zeigt Python diese Bytes als ASCII-Codepunkte an, um das Lesen ihres Inhalts zu erleichtern. Alle Bytes außerhalb des druckbaren Bereichs von ASCII-Zeichen werden als Escape-Sequenzen angezeigt (z. B. \n , \x82 usw.).

Da ein bytes Objekt aus einer Folge von Ganzzahlen besteht, können Sie ein bytes Objekt aus einer beliebigen anderen Folge von Ganzzahlen mit Werten im Bereich von 0 bis 255 wie eine Liste erstellen:

 bytes([72, 101, 108, 108, 111]) 

bytes Modell binäre Daten , einschließlich codierten Text . Wenn Ihr bytes Wert Text enthält, müssen Sie ihn zunächst mit dem richtigen Codec dekodieren. Wenn die Daten beispielsweise als UTF-8 codiert sind, können Sie einen Unicode- str Wert erhalten mit:

 strvalue = bytesvalue.decode('utf-8') 

Um umgekehrt von Text in einem str Objekt zu bytes , müssen Sie kodieren . Sie müssen sich für eine Codierung entscheiden, die Sie verwenden möchten. Standardmäßig wird UTF-8 verwendet. Was Sie jedoch benötigen, hängt stark von Ihrem Anwendungsfall ab:

 bytesvalue = strvalue.encode('utf-8') 

Sie können auch den Konstruktor bytes(strvalue, encoding) , um das Gleiche zu tun.

Sowohl die Decodierungs- als auch die Codierungsmethode benötigen ein zusätzliches Argument, um anzugeben, wie Fehler behandelt werden sollen .

Python 2, Version 2.6 und 2.7, unterstützt auch das Erstellen von String-Literalen mit b'..' Zeichenketten-Syntax b'..' , um den Code zu vereinfachen, der sowohl auf Python 2 als auch auf 3 funktioniert.