8 Stimmen

String in Python mit meinem Unicode?

Python 3.2 (r32:88445, Feb 20 2011, 21:29:02) [MSC v.1500 32 bit (Intel)] on win32
Type "copyright", "credits" or "license()" for more information.
>>> str_version = ''
>>> type(str_version)
<class 'str'>
>>> print (str_version)

>>> unicode_version = ''.decode('utf-8')
Traceback (most recent call last):
  File "<pyshell#3>", line 1, in <module>
    unicode_version = ''.decode('utf-8')
AttributeError: 'str' object has no attribute 'decode'
>>> 

Was ist das Problem mit meiner Unicode-Zeichenkette?

10voto

Brandon Rhodes Punkte 75647

Es ist alles in Ordnung mit deiner Schnur! Sie haben nur verwechselt encode() y decode() . Die Zeichenfolge besteht aus sinnvollen Symbolen. Um sie in Bytes umzuwandeln, die in einer Datei gespeichert oder über das Internet übertragen werden können, verwenden Sie encode() mit einer Kodierung wie UTF-8. Jede Kodierung ist ein Schema für die Umwandlung sinnvoller Symbole in flache Ausgabebytes.

Wenn es an der Zeit ist, das Gegenteil zu tun - einige rohe Bytes aus einer Datei oder einem Socket zu nehmen und sie in Symbole wie Buchstaben und Zahlen umzuwandeln - werden Sie dekodieren die Bytes unter Verwendung der decode() Methode von Bytestrings in Python 3.

>>> str_version = ''
>>> str_version.encode('utf-8')
b'\xe1\x9e\x93\xe1\x9e\x99\xe1\x9f\x84\xe1\x9e\x94\xe1\x9e\xb6\xe1\x9e\x99'

Sehen Sie diese lange Reihe von Bytes? Das sind die Bytes, die UTF-8 verwendet, um Ihre Zeichenfolge darzustellen, wenn Sie die Zeichenfolge über ein Netzwerk übertragen oder in einem Dokument speichern müssen. Es gibt noch viele andere Kodierungen, aber es scheint die beliebteste zu sein. Jede Kodierung kann sinnvolle Symbole wie und in Bytes umwandeln - die kleinen 8-Bit-Zahlen, mit denen Computer kommunizieren.

>>> rawbytes = str_version.encode('utf-8')
>>> rawbytes
b'\xe1\x9e\x93\xe1\x9e\x99\xe1\x9f\x84\xe1\x9e\x94\xe1\x9e\xb6\xe1\x9e\x99'
>>> rawbytes.decode('utf-8')
''

7voto

Sie lesen die 2.x-Dokumente. str.decode() (und bytes.encode() ) wurde in 3.x fallengelassen. Und str ist bereits eine Unicode-Zeichenkette; sie muss nicht mehr dekodiert werden.

3voto

Sie haben bereits eine Unicode-Zeichenkette. In Python 3, str sind Unicode-Zeichenfolgen ( unicode in Python 2.x), und Ein-Byte-Zeichenfolgen (Python 2.x str ) werden nicht mehr als Text behandelt, sie heißen jetzt bytes . Letzteres kann in eine str mit seinem decode Methode, aber erstere ist bereits entschlüsselt - Sie können nur verschlüsseln es zurück in bytes .

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X