Python 3 對於字串的資料轉換說明

來源:互聯網
上載者:User

標籤:python unicode 編碼 byte 二進位 ascii 文本 字串 utf-8

Python 3最重要的新特性大概要算是對文本和位元據作了更為清晰的區分。文本總是Unicode,由str類型表示,位元據則由bytes類型表示。Python 3不會以任意隱式的方式混用str和bytes,正是這使得兩者的區分特別清晰。你不能拼接字串和位元組包,也無法在位元組包裡搜尋字串(反之亦然),也不能將字串傳入參數為位元組包的函數(反之亦然)。這是件好事。


不管怎樣,字串和位元組包之間的界線是必然的,下面的圖解非常重要,務請牢記於心:

650) this.width=650;" src="http://s3.51cto.com/wyfs02/M00/6D/8E/wKiom1Vl_qHQInFcAABRA4eYcjg362.jpg" title="01QoN7aXN1il.png" alt="wKiom1Vl_qHQInFcAABRA4eYcjg362.jpg" />

圖解,非常重要。


字串可以編碼成位元組包,而位元組包可以解碼成字串。

>>> ‘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‘


引申閱讀: 阿獃學Unicode--編碼 

本文出自 “Professor哥” 部落格,請務必保留此出處http://professor.blog.51cto.com/996189/1655816

Python 3 對於字串的資料轉換說明

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.