對於單個字符的編碼,Python提供了
ord()
函數獲取字符的整數表示,
chr()
函數把編碼轉換爲對應的字符:
print('ord(\'A\') :',ord('A'))
print('ord(\'中\') :',ord('中'))
print('chr(66) :',chr(66))
print('chr(25991) :',chr(25991))
如果知道字符的整數編碼,還可以用十六進制這麼寫str
:
print('\u4e2d\u6587')
由於Python的字符串類型是str
,在內存中以Unicode表示,一個字符對應若干個字節。如果要在網絡上傳輸,或者保存到磁盤上,就需要把str
變爲以字節爲單位的bytes
。
Python對bytes
類型的數據用帶b
前綴的單引號或雙引號表示:
x = b'ABC'
要注意區分'ABC'
和b'ABC'
,前者是str
,後者雖然內容顯示得和前者一樣,但bytes
的每個字符都只佔用一個字節。
以Unicode表示的str
通過encode()
方法可以編碼爲指定的bytes
,例如:
a = 'ABC'.encode('ascii')
print(' \'ABC\'.encode(\'ascii\') :',a)
b = '中文'.encode('utf-8')
print('\'中文\'.encode(\'utf-8\') :',b)
#c = '中文'.encode(ascii) #ASCII不能表示中文,因爲中文編碼的範圍超過了ASCII編碼的範圍,Python會報錯。
純英文的str
可以用ASCII
編碼爲bytes
,內容是一樣的,含有中文的str
可以用UTF-8
編碼爲bytes
。含有中文的str
無法用ASCII
編碼,因爲中文編碼的範圍超過了ASCII
編碼的範圍,Python會報錯。
在bytes
中,無法顯示爲ASCII字符的字節,用\x##
顯示。
反過來,如果我們從網絡或磁盤上讀取了字節流,那麼讀到的數據就是bytes
。要把bytes
變爲str
,就需要用decode()
方法:
d = b'ABC'.decode('ascii')
print(' b\'ABC\'.decode(\'ascii\') :',d)
e = b'\xe4\xb8\xad\xe6\x96\x87'.decode('utf-8')
ee = ' b\'\\xe4\\xb8\\xad\\xe6\\x96\\x87\'.decode(\'utf-8\') :'
print(ee,e)