Her zaman unicode'dan baytlara kodlayın .
Bu yönde kodlamayı seçersiniz .
>>> u"你好".encode("utf8")
'\xe4\xbd\xa0\xe5\xa5\xbd'
>>> print _
你好
Diğer yol, baytlardan unicode'a kod çözmektir.
Bu yönde kodlamanın ne olduğunu bilmelisiniz .
>>> bytes = '\xe4\xbd\xa0\xe5\xa5\xbd'
>>> print bytes
你好
>>> bytes.decode('utf-8')
u'\u4f60\u597d'
>>> print _
你好
Bu nokta yeterince vurgulanamaz. Unicode "köstebek vurma" oynamaktan kaçınmak istiyorsanız, veri düzeyinde neler olduğunu anlamak önemlidir. Burada başka bir şekilde açıklanıyor:
- Bir unicode nesnesinin kodu çözülmüştür, onu asla çağırmak istemezsiniz
decode
.
- Bir bytestring nesnesi zaten kodlanmıştır, onu asla çağırmak istemezsiniz
encode
.
Şimdi, .encode
bir bayt dizesini gördükten sonra, Python 2 önce onu örtük olarak metne (bir unicode
nesne) dönüştürmeye çalışır . Benzer şekilde, .decode
bir unicode dizesini gördükten sonra, Python 2 örtük olarak onu bayta (bir str
nesne) dönüştürmeye çalışır .
Alabileceğiniz neden Bunlar örtük dönüşümler dediğiniz zaman . Bunun nedeni, kodlamanın genellikle bir tür parametresini kabul etmesidir ; bir parametre alırken , başka bir kodlamayla yeniden kodlamadan önce bir nesne türünde örtük bir kod çözme vardır . Bu dönüştürme, varsayılan bir 'ascii' kod çözücüyü seçer † ve size bir kodlayıcı içinde kod çözme hatası verir.Unicode
Decode
Error
encode
unicode
str
unicode
Aslında, Python 3'te yöntemler var str.decode
ve bytes.encode
yok bile. Onların kaldırılması, bu yaygın kafa karışıklığını önlemek için [tartışmalı] bir girişimdi.
† ... veya kodlama ne sys.getdefaultencoding()
diyorsa; genellikle bu "ascii" dir