Heim  >  Artikel  >  Backend-Entwicklung  >  Ausführliche Erläuterung der Lösung von Python3 für schwierige Zeichencodierungsprobleme

Ausführliche Erläuterung der Lösung von Python3 für schwierige Zeichencodierungsprobleme

PHPz
PHPzOriginal
2017-04-02 13:23:491463Durchsuche

Eine der wichtigsten Verbesserungen von

Python3 besteht darin, die große Lücke zu schließen, die durch String und Zeichenkodierung in Python2 entsteht. Warum ist Python-Codierung so schmerzhaft? Es wurden einige Fehler im Python2-String-Design eingeführt:
- Die Verwendung von ASCII-Code als Standardcodierungsmethode ist für die chinesische Verarbeitung sehr unfreundlich.
- Erzwungene Aufteilung von Zeichenfolgen in zwei Typen, Unicode und Str, führt Entwickler in die Irre

Dies ist natürlich kein Fehler, solange Sie bei der Verarbeitung mehr Aufmerksamkeit schenken, können Sie diese Fallstricke vermeiden. Aber in Python3 werden beide Probleme sehr gut gelöst.

Zunächst setzt Python3 die Systemstandardkodierung auf UTF-8

>>> import sys
>>> sys.getdefaultencoding()
'utf-8'
>>>

Dann werden Textzeichen und Binärdaten klarer unterschieden, dargestellt durch str bzw. Bytes. Alle Textzeichen werden durch den Typ str dargestellt. str kann alle Zeichen im Unicode--Zeichensatz darstellen, während binäre Bytedaten durch einen neuen -Datentyp dargestellt werden, der durch Bytes dargestellt wird.

str

>>> a = "a"
>>> a
'a'
>>> type(a)
<class &#39;str&#39;>
>>> b = "禅"
>>> b
&#39;禅&#39;
>>> type(b)
<class &#39;str&#39;>

bytes

Fügen Sie in Python3 „b“ vor dem Anführungszeichen ein, um deutlich anzuzeigen, dass es sich um ein Byte-Typ--Objekt Tatsächlich handelt es sich um Daten, die aus einer Reihe binärer Bytesequenzen bestehen. Der Bytetyp kann Zeichen im ASCII-Bereich und andere Zeichendaten in Hexadezimalform sein, er kann jedoch nicht durch Nicht-ASCII-Zeichen wie Chinesisch dargestellt werden.

>>> c = b&#39;a&#39;>>> c
b&#39;a&#39;>>> type(c)
<class &#39;bytes&#39;>

>>> d = b&#39;\xe7\xa6\x85&#39;>>> d
b&#39;\xe7\xa6\x85&#39;>>> type(d)
<class &#39;bytes&#39;>
>>>

>>> e = b&#39;禅&#39;
  File "<stdin>", line 1SyntaxError: bytes can only contain ASCII literal characters.
Der Bytetyp bietet dieselben Operationen wie str und unterstützt Operationen wie Sharding, Indizierung und grundlegende numerische Operationen. Die +-Operation kann jedoch nicht für Daten vom Typ str und Bytes ausgeführt werden, obwohl sie in py2 möglich ist.

>>> b"a"+b"c"
b&#39;ac&#39;
>>> b"a"*2
b&#39;aa&#39;
>>> b"abcdef\xd6"[1:]
b&#39;bcdef\xd6&#39;
>>> b"abcdef\xd6"[-1]
214
>>> b"a" + "b"
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: can&#39;t concat bytes to str
kodieren und dekodieren

Die Konvertierung zwischen str und Bytes kann mit den Methoden kodieren und dekodieren erfolgen.


encode ist für die Konvertierung der Zeichen-zu-Byte-Kodierung verantwortlich. Standardmäßig wird die UTF-8-Kodierung verwendet.

>>> s = "Python之禅"
>>> s.encode()
b&#39;Python\xe4\xb9\x8b\xe7\xa6\x85&#39;
>>> s.encode("gbk")
b&#39;Python\xd6\xae\xec\xf8&#39;
decode ist für die Dekodierung und Konvertierung von Bytes in Zeichen verantwortlich und verwendet im Allgemeinen das UTF-8-Codierungsformat für die Konvertierung.

Das obige ist der detaillierte Inhalt vonAusführliche Erläuterung der Lösung von Python3 für schwierige Zeichencodierungsprobleme. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn