python str和bytes的區別

bytes

bytes對象只負責以二進制字節序列的形式記錄所需記錄的對象,至於該對象到底表示什麼(比如到底是什麼字符)則由相應的編碼格式解碼所決定

Python2 中

>>> type(b'xxxxx')
<type>
>>> type('xxxxx')
<type>
/<type>/<type>

Python3 中

>>> type(b'xxxxx')
<class>
>>> type('xxxxx')
<class>
/<class>/<class>

bytes是Python 3中特有的,Python 2 裡不區分bytes和str。

python3中:

str 使用encode方法轉化為 bytes

bytes通過decode轉化為str

In [9]: str1='人生苦短,我用Python!'
In [10]: type(str1)
Out[10]: str
In [11]: b=str1.encode()
In [12]: b
Out[12]: b'\\\\xe4\\\\xba\\\\xba\\\\xe7\\\\x94\\\\x9f\\\\xe8\\\\x8b\\\\xa6\\\\xe7\\\\x9f\\\\xad\\
xef\\\\xbc\\\\x8c\\\\xe6\\\\x88\\\\x91\\\\xe7\\\\x94\\\\xa8Python!'
In [13]: type(str1.encode())
Out[13]: bytes

bytes轉換成str:

In [22]: b
Out[22]: b'\\\\xe4\\\\xba\\\\xba\\\\xe7\\\\x94\\\\x9f\\\\xe8\\\\x8b\\\\xa6\\\\xe7\\\\x9f\\\\xad\\
xef\\\\xbc\\\\x8c\\\\xe6\\\\x88\\\\x91\\\\xe7\\\\x94\\\\xa8Python!'
In [23]: type(b)
Out[23]: bytes
In [24]: b.decode()
Out[24]: '人生苦短,我用Python!'
In [25]: type(b.decode())
Out[25]: str

在Python 2中由於不區分str和bytes所以可以直接通過encode()和decode()方法進行編碼解碼。

而在Python 3中把兩者給分開了這個在使用中需要注意。實際應用中在互聯網上是通過二進制進行傳輸,所以就需要將str轉換成bytes進行傳輸,而在接收中通過decode()解碼成我們需要的編碼進行處理數據這樣不管對方是什麼編碼而本地是我們使用的編碼這樣就不會亂碼。

bytearray

bytearray和bytes不一樣的地方在於,bytearray是可變的。

In [26]: str1
Out[26]: '人生苦短,我用Python!'
In [28]: b1=bytearray(str1.encode())
In [29]: b1
Out[29]: bytearray(b'\\\\xe4\\\\xba\\\\xba\\\\xe7\\\\x94\\\\x9f\\\\xe8\\\\x8b\\\\xa6\\\\xe7\\\\x9f\\\\xad\\\\xef\\\\xbc\\\\x8c\\\\xe6\\\\x88\\\\x91\\\\xe7\\\\x94\\\\xa8Python!')
In [30]: b1.decode()
Out[30]: '人生苦短,我用Python!'
In [31]: b1[:6]=bytearray('生命'.encode())
In [32]: b1
Out[32]: bytearray(b'\\\\xe7\\\\x94\\\\x9f\\\\xe5\\\\x91\\\\xbd\\\\xe8\\\\x8b\\\\xa6\\\\xe7\\\\x9f\\\\xad\\\\xef\\\\xbc\\\\x8c\\\\xe6\\\\x88\\\\x91\\\\xe7\\\\x94\\\\xa8Python!')
In [33]: b1.decode()

Out[33]: '生命苦短,我用Python!'


分享到:


相關文章: