python3最重要的新特性大概要算對文本和二進制數據做了更為清晰的區分,文本總是unicode字符集,有str類型表示,二進制數據則有bytes類型表示。python3不會以任何隱式的方式混用str和bytes,正是這是的這兩者的區別特別明顯,你不能拼接字符串和字節包,也無法在字節包里搜索字符串(反之亦然),也不能將字符串傳入參數為字節包的函數(反之亦然);
我們不關心字符串在內部是如何被表示的,也不關心它用幾個字節來表示每個字符。只有在將字符串編碼成字節(如用於通信信道的傳輸)或將字節解碼成字符串時,才考慮這些問題。

1. 創建bytes類型數據
>>> a = bytes([1,2,3,4])
>>> a
b'\x01\x02\x03\x04'
>>> type(a)
<class 'bytes'>
>>>
>>> a = bytes('hello','ascii')
>>>
>>> a
b'hello'
>>> type(a)
<class 'bytes'>
>>>
2. 編碼可以將抽象字符以二進制數據的形式表示,有很多編碼方法,如utf-8、gbk等,可以使用encode()函數對字符串進行編碼,轉換成二進制字節數據,也可用decode()函數將字節解碼成字符串;用decode()函數解碼,可不要用指定編碼格式;
>>> a = 'hello world'
>>> type(a)
<class 'str'>
>>> a
'hello world'
>>>
a. 按utf-8的方式編碼,轉成bytes:以及解碼成字符串
>>> b = a.encode(encoding='utf-8')
>>> type(b)
<class 'bytes'>
>>>
>>> b
b'hello world'
>>>
>>>
>>> c = b.decode(encoding='utf-8')
>>> type(c)
<class 'str'>
>>> c
'hello world'
>>>
b. 按gbk的方式編碼,轉成bytes:以及解碼成字符串
>>> x = a.encode(encoding='gbk')
>>> type(x)
<class 'bytes'>
>>>
>>> x
b'hello world'
>>>
>>> y = x.decode()
>>> type(y)
<class 'str'>
>>>
>>> y
'hello world'
>>>
