python3 中 byte 和string轉換

2021-08-31 21:10:14 字數 1667 閱讀 3443

python3 中 byte 和string轉換

舉例,我要將byte轉換為string型別

一開始我是直接使用  a = str(b)

但是發現結果並非我想要的那種,後來在網上發現了一篇寫的很好的文章

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'

python3新增的byte型別

在python2中位元組型別同字元型別區分不大,但是在python3中最重要的特性是對文字和二進位制資料做了更加清晰的區分,文字總是unicode,由字元型別表示,而二進位制資料則由byte型別表示,python3不會以任意隱式方式混用位元組型和字元型,也因此在python3中不能拼接字串和位元組包...

Python3中bytes和HexStr之間的轉換

在python運算元據內容時,多數情況下可能遇到下面3種型別的資料處理 hexstring 如 1c532145697a8b6f str 如 x1c x53 x21 x45 x69 x7a x8b x6f list 如 0x1c,0x53,0x21,0x45,0x69,0x7a,0x8b,0x6f ...

Python3中is和 的區別?

1.背景 1 變數 記憶體理解 變數 用來標識 identify 一塊記憶體區域。為了方便表示記憶體,我們操作變數實質上是在操作變數指向的那塊記憶體單元。編譯器負責分配。我們可以使用python內建函式id 來獲取變數的位址。變數名 是乙個識別符號 dientify 用來代之一塊記憶體空間,使用這個...