8 Stimmen

String In python with my unicode?

Python 3.2 (r32:88445, 20. Feb 2011, 21:29:02) [MSC v.1500 32 Bit (Intel)] auf win32
Geben Sie "copyright", "credits" oder "license()" für weitere Informationen ein.
>>> str_version = ''
>>> type(str_version)
<class 'str'>
>>> print (str_version)

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

Was ist das Problem mit meinem Unicode-String?

10voto

Brandon Rhodes Punkte 75647

Es ist nichts mit Ihrem String falsch! Sie haben nur encode() und decode() durcheinander gebracht. Der String enthält sinnvolle Symbole. Um ihn in Bytes umzuwandeln, die in einer Datei gespeichert oder über das Internet übertragen werden können, verwenden Sie encode() mit einer Codierung wie UTF-8. Jede Codierung ist ein Schema zum Umwandeln sinnvoller Symbole in flache Ausgabebits.

Wenn es an der Zeit ist, das Gegenteil zu tun - also rohe Bytes aus einer Datei oder einem Socket in Symbole wie Buchstaben und Zahlen umzuwandeln - verwenden Sie die Methode decode() von Byte-Strings 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 sich diese lange Zeile von Bytes an? Das sind die Bytes, die UTF-8 verwendet, um Ihren String darzustellen, wenn Sie den String über ein Netzwerk übertragen müssen oder in einem Dokument speichern müssen. Es gibt viele andere verwendete Codierungen, aber UTF-8 scheint die beliebteste zu sein. Jede Codierung kann sinnvolle Symbole wie ⱓ und in Bytes umwandeln - die kleinen 8-Bit-Nummern, 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')
''

0 Stimmen

Noch nicht sauber. Könnten Sie es bitte genauer erklären? Danke Brandon Craig Rhodes

0 Stimmen

Ich habe einen weiteren Absatz hinzugefügt und einige Codebeispiele eingefügt - machen diese es irgendwie klarer?

0 Stimmen

Jetzt ist es klar. Ich verstehe jetzt aus deinem Beispiel, vielen Dank @Brandon Craig Rhodes

7voto

Sie lesen die 2.x Dokumentation. str.decode() (und bytes.encode()) wurde in 3.x entfernt. Und str ist bereits ein Unicode-String; es ist nicht erforderlich, ihn zu dekodieren.

3voto

Sie haben bereits einen Unicode-String. In Python 3 sind str Unicode-Strings (unicode in Python 2.x) und Ein-Byte-Strings (Python 2.x str) werden nicht mehr als Text behandelt, sie werden jetzt bytes genannt. Letztere können mit ihrer Methode decode in einen str umgewandelt werden, aber der erste ist bereits decodiert - Sie können ihn nur in bytes zurück codieren.

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