Das bPräfix kennzeichnet ein bytesZeichenfolgenliteral .
Wenn Sie sehen, dass es im Python 3-Quellcode verwendet wird, erstellt der Ausdruck ein bytesObjekt , kein reguläres Unicode- strObjekt . Wenn Sie sehen, dass es in Ihrer Python-Shell oder als Teil einer Liste, eines Diktats oder eines anderen Containerinhalts wiedergegeben wird, sehen Sie ein bytesObjekt, das mit dieser Notation dargestellt wird.
bytesObjekte enthalten grundsätzlich 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. Jegliche Bytes außerhalb des druckbaren Bereichs von ASCII - Zeichen sind als Escape - Sequenzen gezeigt (zB \n, \x82usw.). Umgekehrt können Sie sowohl ASCII-Zeichen als auch Escape-Sequenzen verwenden, um Bytewerte zu definieren. für ASCII-Werte wird deren numerischer Wert verwendet (zB b'A'== b'\x41')
Da ein bytesObjekt aus einer Folge von Ganzzahlen besteht, können Sie ein bytesObjekt aus einer beliebigen anderen Folge von Ganzzahlen mit Werten im Bereich von 0 bis 255 erstellen, z. B. eine Liste:
bytes([72, 101, 108, 108, 111])
und Indizierung gibt Ihnen die ganzen Zahlen zurück (aber Slicing erzeugt einen neuen bytesWert, für das obige Beispiel, value[0]gibt Ihnen 72aber value[:1]ist b'H'als 72 der ASCII - Code Punkt für den Großbuchstaben ist H ).
bytesmodellieren Binärdaten , einschließlich codierter Text . Wenn Ihr bytesWert Text enthält, müssen Sie ihn zuerst mit dem richtigen Codec dekodieren. Wenn die Daten beispielsweise als UTF-8 codiert sind, können Sie einen Unicode- strWert erhalten mit:
strvalue = bytesvalue.decode('utf-8')
Um umgekehrt von Text in einem strObjekt zu einem zu byteswechseln, müssen Sie codieren . Sie müssen sich für eine zu verwendende Codierung entscheiden. 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 verwenden, bytes(strvalue, encoding)um dasselbe zu tun.
Sowohl die Dekodierungs- als auch die Kodierungsmethode benötigen ein zusätzliches Argument, um anzugeben, wie Fehler behandelt werden sollen .
Python 2, Versionen 2.6 und 2.7, unterstützt auch das Erstellen von String-Literalen mithilfe der b'..'String-Literal-Syntax, um Code zu vereinfachen, der sowohl in Python 2 als auch in Python 3 funktioniert.
bytesObjekte sind unveränderlich, genau wie strStrings. Verwenden Sie ein bytearray()Objekt, wenn Sie einen veränderlichen Bytewert benötigen.