The decode
Metode string unicode benar-benar tidak memiliki aplikasi sama sekali (kecuali jika Anda memiliki beberapa data non-teks dalam string unicode untuk beberapa alasan - lihat di bawah). Itu terutama ada karena alasan historis, saya pikir. Dalam Python 3 itu benar-benar hilang.
unicode().decode()
akan melakukan implisit encoding dari s
menggunakan default (ascii) codec. Verifikasi seperti ini:
>>> 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)
Pesan kesalahannya persis sama.
Untuk str().encode()
itu sebaliknya - ia mencoba implisit decoding dari s
dengan encoding default:
>>> 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)
Digunakan seperti ini, str().encode()
juga berlebihan.
Tetapi ada aplikasi lain dari metode terakhir yang berguna: ada penyandian yang tidak ada hubungannya dengan set karakter, dan dengan demikian dapat diterapkan ke string 8-bit dengan cara yang bermakna:
>>> s.encode('zip')
'x\x9c;\xbc\r\x00\x02>\x01z'
Anda benar, meskipun: penggunaan "encoding" yang ambigu untuk kedua aplikasi ini adalah ... awkard. Sekali lagi, dengan terpisah byte
dan string
mengetikkan Python 3, ini tidak lagi menjadi masalah.