Die decode
Methode der Unicode-Zeichenfolgen hat überhaupt keine Anwendungen (es sei denn, Sie haben aus irgendeinem Grund Nicht-Textdaten in einer Unicode-Zeichenfolge - siehe unten). Es ist hauptsächlich aus historischen Gründen da, denke ich. In Python 3 ist es komplett weg.
unicode().decode()
führt eine implizite Codierung der s
Verwendung des Standardcodecs (ASCII) durch. Überprüfen Sie dies wie folgt:
>>> s = u'ö'
>>> s.decode()
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
UnicodeEncodeError: 'ascii' codec can't encode character u'\xf6' in position 0:
ordinal not in range(128)
>>> s.encode('ascii')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
UnicodeEncodeError: 'ascii' codec can't encode character u'\xf6' in position 0:
ordinal not in range(128)
Die Fehlermeldungen sind genau gleich.
Denn str().encode()
es umgekehrt ist - es versucht , eine implizite Decodierung des s
mit der Standard - Codierung:
>>> s = 'ö'
>>> s.decode('utf-8')
u'\xf6'
>>> s.encode()
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
UnicodeDecodeError: 'ascii' codec can't decode byte 0xc3 in position 0:
ordinal not in range(128)
So verwendet, str().encode()
ist auch überflüssig.
Es gibt jedoch eine andere Anwendung der letzteren Methode, die nützlich ist: Es gibt Codierungen , die nichts mit Zeichensätzen zu tun haben und daher auf sinnvolle Weise auf 8-Bit-Zeichenfolgen angewendet werden können:
>>> s.encode('zip')
'x\x9c;\xbc\r\x00\x02>\x01z'
Sie haben jedoch Recht: Die mehrdeutige Verwendung von "Codierung" für diese beiden Anwendungen ist ... unangenehm. Auch hier ist dies mit separaten byte
und string
Typen in Python 3 kein Problem mehr.