Oktette in Python (Oktette in Python), Lektion, Seite 724718
https://www.purl.org/stefan_ram/pub/oktette_python (Permalink) ist die kanonische URI dieser Seite.
Stefan Ram
Python-Kurs

Oktette in Python 

Wenn lediglich nicht-interpretierte Bitmuster  ausgedrückt werden sollen, so kann ein Oktettliteral verwendet werden, in dem die Bits immer in Achtergruppen (Oktetten) durch Zahlen oder Zeichen ausgedrückt werden.

Das Bitmuster zur Zahl 65, hexadezimal „41“, Unicode-Zeichen „A“
○●○○ ○○○● 65 A

Ein solches Bitmuster hat den Typ ›bytes‹ und kann aus einem Zahlen-Iterablen (ein Iterables, das Zahlen liefert) konstruiert werden.

Konsolenprotokoll
bytes( ( 65, ))
b'A'
print( bytes( ( 65, )))
b'A'

Ein solches Bitmuster sieht man auch als eine Oktettfolge  an, weshalb es auch durch ein Zeichenfolgenliteral mit einem vorangestellten »b« geschrieben werden kann.

Konsolenprotokoll
b"A"
b'A'

Die Ausgabe von Oktetten erfolgt – falls möglich – zwar über ihre Zeichendarstellung, doch handelt es sich bei Oktetten nicht  um Zeichen, sondern um Bitmuster. Der Unterschied besteht darin, daß ein Bitmuster keine bestimmte Interpretation (Bedeutung) hat, sondern nur eine Folge von Bits darstellt. Normalerweise wird damit allerdings eine bestimmte Information vermittels eines bestimmten Codes dargestellt, nur ist der Code nicht selber in der Oktettfolge enthalten. Daher gelten Oktettfolgen als „kodiert“, während Zeichenfolgen als „dekodiert“ gelten, denn bei letzteren ist die Interpretation der Bits als Zeichen klar.

Oktettfolgen sind kodiert.
Zeichenfolgen sind dekodiert.

Umwandlung einer Oktettfolge in eine Zeichenfolge

Eine Oktettfolge vom Typ ›bytes‹ kann mit ›str‹ in eine Zeichenfolge vom Typ ›str‹ verwandelt werden.

Konsolenprotokoll

b = bytes( ( 65, ))

print( b )

b'A'
print( str( b ))
b'A'

Dann ergibt sich die übliche Textdarstellung von Oktettfolgen mit einem vorangestellten »b«.

Verwendung von Kennzahlen in Oktettliteralen

In Oktettliteralen können auch hexadezimale Kennzahlen nach »\x« verwendet werden.

Konsolenprotokoll (gekürzt und übersetzt)
print( b"\x41" )
b'A'

Mit »\u«, »\U« und »\N« beginnenden Schreibweisen haben in Oktettliteralen aber nicht die spezielle Bedeutung, die sie in Zeichenfolgenliteralen haben.

Dekodierung von Oktettfolgen

Manchmal erhält man Text in einer bestimmten Kodierung als Oktettfolge. Eine Dekodierung ist dann möglich, wenn man den verwendeten Code kennt. Die Information über den verwendeten Code ist nicht in der Oktettfolge selber enthalten, sondern muß anderen Quellen entnommen werden.

Konsolenprotokoll (gekürzt und übersetzt)

b = b'\xc3\xa4'

print( b )

b'\xc3\xa4'
print( b.decode( "utf_8" ))
ä
print( b.decode( "latin_1" ))
ä
print( b.decode( "cp1252" ))
ä
print( b.decode( "ascii" ))
UnicodeDekodierungsfehler: 'ascii'-Codec kann Byte 0xc3 an Position 0 nicht dekodieren: Ordinalzahl nicht im Bereich(128)
>>> b.decode( "ascii", errors="ignore" )
''

Zu den Namen von Kodierungen siehe “Standard Encodings ” in “The Python Library Reference ”.

Zu den möglichen Fehlerbehandlungsnamen siehe “Codec Base Classes ” in “The Python Library Reference ”.

Kodieren und Dekodieren

Zeichenfolgen können kodiert werden, was dann eine Oktettfolge ergibt.

Konsolenprotokoll (gekürzt und übersetzt)
print( "Abstände".encode( "utf_8" ).decode( "latin_1" ))
Abstände

Solche Zeichenfolgen, die sich aus einer Dekodierung mit der falschen Code ergeben, werden auch als Zeichensalat  (mojibake, 文字化け) bezeichnet. Sie lassen sich oft durch Umkehrung des Verfahrens wieder korrigieren.

Konsolenprotokoll (gekürzt und übersetzt)
print( "Abstände".encode( "latin_1" ).decode( "utf_8" ))
Abstände

 

Seiteninformationen und Impressum   |   Mitteilungsformular  |   "ram@zedat.fu-berlin.de" (ohne die Anführungszeichen) ist die Netzpostadresse von Stefan Ram.   |   Eine Verbindung zur Stefan-Ram-Startseite befindet sich oben auf dieser Seite hinter dem Text "Stefan Ram".)  |   Der Urheber dieses Textes ist Stefan Ram. Alle Rechte sind vorbehalten. Diese Seite ist eine Veröffentlichung von Stefan Ram. Schlüsselwörter zu dieser Seite/relevant keywords describing this page: Stefan Ram Berlin slrprd slrprd stefanramberlin spellched stefanram724718 stefan_ram:724718 Oktette in Python Stefan Ram, Berlin, and, or, near, uni, online, slrprd, slrprdqxx, slrprddoc, slrprd724718, slrprddef724718, PbclevtugFgrsnaEnz Erklärung, Beschreibung, Info, Information, Hinweis,

Der Urheber dieses Textes ist Stefan Ram. Alle Rechte sind vorbehalten. Diese Seite ist eine Veröffentlichung von Stefan Ram.
https://www.purl.org/stefan_ram/pub/oktette_python