python2與python3的bytes問題


>>> s  = '編程'
>>> print s
編程
>>> s
'\xe7\xbc\x96\xe7\xa8\x8b'
>>>

在python2中直接調用字符串的變量的話,會打印其bytes(可以理解成用16進制表示字符串的內存地址,本質還是二進制)。在python2中,bytes和str是一回事。

為什么要有個bytes呢?。因為所有數據本質都是用二進制進行儲存的,當傳輸數據的時候,要把這些數據先轉換成二進制( bytes)在進行傳輸。除此之外,python2里還有個單獨的數據類型,把字符串解碼后,就會變成unicode。

>>> s
'\xe8\xb7\xaf\xe9\xa3\x9e' #utf-8
>>> s.decode('utf-8')
u'\u8def\u98de' #unicode 在unicode編碼表里對應的位置
>>> print(s.decode('utf-8'))
路飛 #unicode 格式的字符

原因是python2的默認編碼是ASCII,后來為了支持多國語言,就想弄個unicode。但是直接把ASCII轉成unicode是很費勁的,所以龜叔直接搞了一個新的字符類型,就叫unicode,說白了就是你得在內存里先把字符串存成unicode類型

 

2008年python3出世,來了個大變革:

  1. 把字符串的編碼變成了unicode,文件默認編碼變成了utf-8。
  2.  把str 和bytes 做了明確區分, str 就是unicode格式的字符, bytes就是單純二進制

還有一個很重要的是,在python3中,只有unicode給你展示字形,其他的編碼一律用bytes展示,也就是說要你強制使用unicode。

 

最后再提示一下,Python只要出現各種編碼問題,無非是哪里的編碼設置出錯了
常見編碼錯誤的原因有:

      • Python解釋器的默認編碼
      • Python源文件文件編碼
      • Terminal使用的編碼
      • 操作系統的語言設置

 

參考:https://www.cnblogs.com/alex3714/articles/7550940.html


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM