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 .encodepada string byte, Python 2 pertama kali mencoba mengubahnya secara implisit menjadi teks ( unicodeobjek). Demikian pula, saat melihat .decodepada string unicode, Python 2 secara implisit mencoba mengubahnya menjadi byte ( strobjek).
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.UnicodeDecodeErrorencodeunicodestrunicode
Faktanya, dalam Python 3 metode str.decodedanbytes.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'