學習python,第四篇:Python 3中bytes/string的區別,pythonbytes

來源:互聯網
上載者:User

學習python,第四篇:Python 3中bytes/string的區別,pythonbytes

原文:http://eli.thegreenplace.net/2012/01/30/the-bytesstr-dichotomy-in-python-3

 

python 3中最重要的新特性可能就是將文本(text)和位元據做了更清晰的區分。文本總是用unicode進行編碼,以str類型表示;而位元據以bytes類型表示。

在python3中,不能以任何隱式方式將str和bytes類型二者混合使用。不可以將str和bytes類型進行拼接,不能在str中搜尋bytes資料(反之亦然),也不能將str作為參數傳入需要bytes型別參數的函數(反之亦然)。

 

字串和位元組符之間劃分界線是必然的。下面這個圖解要牢記於心:

strings可以被編碼(encode)成字bytes,bytes也可以解碼(decode)成strings:

>>> '€20'.encode('utf-8')b'\xe2\x82\xac20'>>> b'\xe2\x82\xac20'.decode('utf-8')'€20'

可以這樣理解:

string是文本(text)的抽象表示。字串(string)由字元組成,字元也是抽象的實體且與任何二進位表示無關。
當操縱字串的時候,很多細節是不用瞭解的。我們可以分割、切片和拼接字串,在字串內部進行搜尋。但並不在乎內部是如何表示的,也不用在意底層一個字元要花費多少byte。
只有在需要將string編碼(encode)成byte的時候,比如:通過網路傳輸資料;或者需要將byte解碼(decode)成string的時候,我們才會關注string和byte的區別。

 

傳入encode和decode的參數是編碼方式。編碼是一種用位元據表示抽象字元的方式。目前有很多種編碼。上面給出的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'

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.