Python3_字符串和編碼

 對於單個字符的編碼,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)

 

 

 

 

 

 

 

 

 

 



 

 

 

 


 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章