Python 3的bytes/str之別
Python 3最重要的新特性大概要算是對文字和二進位制資料作了更為清晰的區分。文字總是Unicode,由str型別表示,二進位制資料則由bytes型別表示。Python 3不會以任意隱式的方式混用str和bytes,正是這使得兩者的區分特別清晰。你不能拼接字串和位元組包,也無法在位元組包裡搜尋字串(反之亦然),也不能將字串傳入引數為位元組包的函式(反之亦然)。這是件好事。
不管怎樣,字串和位元組包之間的界線是必然的,下面的圖解非常重要,務請牢記於心:
字串可以編碼成位元組包,而位元組包可以解碼成字串。
>>> '€20'.encode('utf-8')
b'\xe2\x82\xac20'
>>> b'\xe2\x82\xac20'.decode('utf-8')
'€20'
這個問題要這麼來看:字串是文字的抽象表示。字串由字元組成,字元則是與任何特定二進位制表示無關的抽象實體。在操作字串時,我們生活在幸福的無知之中。我們可以對字串進行分割和分片,可以拼接和搜尋字串。我們並不關心它們內部是怎麼表示的,字串裡的每個字元要用幾個位元組儲存。只有在將字串編碼成位元組包(例如,為了在通道上傳送它們)或從位元組包解碼字串(反向操作)時,我們才會開始關注這點。
傳入encode和decode的引數是編碼(或codec)。編碼是一種用二進位制資料表示抽象字元的方式。目前有很多種編碼。上面給出的UTF-8是其中一種,下面是另一種:
>>> '€20'.encode('iso-8859-15')
b'\xa420'
>>> b'\xa420'.decode('iso-8859-15')
'€20'
編碼是這個轉換過程中至關重要的一部分。離了編碼,bytes物件b'\xa420'只是一堆位元位而已。編碼賦予其含義。採用不同的編碼,這堆位元位的含義就會大不同:
>>> b'\xa420'.decode('windows-1255')
'₪20'
據說百分之八十的金錢損失皆因使用錯誤的編碼導致,因此務必小心謹慎。
引申閱讀
相關文章
- Effective Python(3)- 瞭解 bytes 與 str 的區別Python
- python str與bytes之間的轉換Python
- Python報錯:TypeError: a bytes-like object is required, not ‘str‘PythonErrorObjectUI
- Python基本資料型別之strPython資料型別
- TypeError: can‘t concat str to bytesError
- char str[]和char *str的區別
- Python3之字串str、列表list、元組tuple的切片操作Python字串
- python3去除str中的n、rPython
- Python 編碼處理之 str與Unicode的區別與使用PythonUnicode
- Python之str內部功能的介紹Python
- Python中str()和repr()函式的區別Python函式
- Python - 基本資料型別_str 字串Python資料型別字串
- Rust中 String、str、&str、char 的區別Rust
- python中的str和repr函式的區別Python函式
- Python3 dict和str互轉Python
- python3 將bytes轉為字串Python字串
- Python3學習筆記1,基本資料型別-Number、strPython筆記資料型別
- String str=null; 和String str=""的區別Null
- Python str型別學習總結(一)Python型別
- 【python】str與json型別轉換PythonJSON型別
- 5.Python3原始碼—字串(str)物件Python原始碼字串物件
- Python 字串 strPython字串
- Python資料型別-str,list常見操作Python資料型別
- Python 優雅程式設計之 str.format()Python程式設計ORM
- python str.endswithPython
- python: 理解__str__Python
- 深入瞭解python2.7 str(), repr(), (``操作符)的區別Python
- 解釋 Python 2 和 Python 3 的版本之間差別Python
- python如何讓str排序Python排序
- Python str() 引發的 UnicodeEncodeErrorPythonUnicodeError
- Python的__str__和__repr__方法Python
- python str dict list 轉換Python
- 詳解Python中的str.format方法PythonORM
- Python 3 學習筆記之——資料型別Python筆記資料型別
- python list tuple str dic series dataframePython
- python str.format高階用法PythonORM
- [Python3] 關於Bytes與String 寫檔案遇到的編碼問題Python
- Python基礎之四:Python3 基礎資料型別Python資料型別