Selalu encode dari unicode ke byte.
Dalam arah ini, Anda dapat memilih pengkodean .
>>> u"你好".encode("utf8")
'\xe4\xbd\xa0\xe5\xa5\xbd'
>>> print _
你好
Cara lainnya adalah dengan memecahkan kode dari byte ke unicode.
Dalam arah ini, Anda harus tahu apa itu pengkodean .
>>> bytes = '\xe4\xbd\xa0\xe5\xa5\xbd'
>>> print bytes
你好
>>> bytes.decode('utf-8')
u'\u4f60\u597d'
>>> print _
你好
Poin ini tidak bisa cukup ditekankan. Jika Anda ingin menghindari bermain unicode "whack-a-mole", penting untuk memahami apa yang terjadi di tingkat data. Di sini dijelaskan dengan cara lain:
- Objek unicode sudah diterjemahkan, Anda tidak ingin memanggilnya
decode
.
- Objek bytestring sudah dikodekan, Anda tidak akan pernah ingin memanggilnya
encode
.
Sekarang, saat melihat .encode
pada string byte, Python 2 pertama kali mencoba mengubahnya secara implisit menjadi teks ( unicode
objek). Demikian pula, saat melihat .decode
pada string unicode, Python 2 secara implisit mencoba mengubahnya menjadi byte ( str
objek).
Konversi implisit ini adalah mengapa Anda bisa mendapatkan saat Anda menelepon . Itu karena encoding biasanya menerima parameter tipe ; saat menerima parameter, ada dekode implisit ke dalam objek berjenis sebelum melakukan encoding ulang dengan encoding lain. Konversi ini memilih decoder 'ascii' default † , memberikan Anda kesalahan decoding di dalam encoder.Unicode
Decode
Error
encode
unicode
str
unicode
Faktanya, dalam Python 3 metode str.decode
danbytes.encode
bahkan tidak ada. Penghapusan mereka adalah upaya [kontroversial] untuk menghindari kebingungan umum ini.
† ... atau kode apa pun yang sys.getdefaultencoding()
disebutkan; biasanya ini adalah 'ascii'