Python自學筆記 3 字元編碼

2021-08-07 16:22:35 字數 2129 閱讀 5259

「可變長編碼」utf-8編碼可根據內容改變位元組數,ascii編碼實際上可以被看成是utf-8編碼的一部分

python提供了ord()函式獲取字元的整數表示,chr()函式把編碼轉換為對應的字元:

>>> ord('a')

65>>> ord('中')

20013

>>> chr(66)

'b'>>> chr(25991)

'文'

如果知道字元的整數編碼,還可以用十六進製制這麼寫str:

>>> 

'\u4e2d\u6587'

'中文'

兩種寫法完全是等價的。

由於python的字串型別是str,在記憶體中以unicode表示,乙個字元對應若干個位元組。如果要在網路上傳輸,或者儲存到磁碟上,就需要把str變為以位元組為單位的bytes

python對bytes型別的資料用帶b字首的單引號或雙引號表示:

x = b'abc'
要注意區分'abc'b'abc',前者是str,後者雖然內容顯示得和前者一樣,但bytes每個字元都只占用乙個位元組。

unicode表示的str通過encode()方法可以編碼為指定的bytes,例如:

>>> 

'abc'.encode('ascii')

b'abc'

>>>

'中文'.encode('utf-8')

b'\xe4\xb8\xad\xe6\x96\x87'

>>>

'中文'.encode('ascii')

traceback (most recent call last):

file "", line 1, in

unicodeencodeerror: 'ascii' codec can't encode characters in position 0-1: ordinal not in range(128)

純英文的str可以用ascii編碼為bytes,內容是一樣的,含有中文的str可以用utf-8編碼為bytes。含有中文的str無法用ascii編碼,因為中文編碼的範圍超過了ascii編碼的範圍,python會報錯。

在bytes中,無法顯示為ascii字元的位元組,用\x##顯示。

反過來,如果我們從網路或磁碟上讀取了位元組流,那麼讀到的資料就是bytes。要把bytes變為str,就需要用decode()方法:

>>> 

b'abc'.decode('ascii')

'abc'

>>>

b'\xe4\xb8\xad\xe6\x96\x87'.decode('utf-8')

'中文'

要計算str包含多少個字元,可以用len()函式:

>>> len('abc')

3>>> len('中文')

2

len()函式計算的是str的字元數,如果換成byteslen()函式就計算位元組數:

>>> len(b'abc')

3>>> len(b'\xe4\xb8\xad\xe6\x96\x87')

6>>> len('中文'.encode('utf-8'))

6

python3自學筆記3 字串和編碼

摘錄自 廖雪峰python3.5教程 內容 字串和編碼 目錄 一 字元編碼的發展 二 python的字串 正文 一 字元編碼的發展 美國人在發明計算機編碼時只將大小寫英文本母 數字和一些符號共127個字母編碼到計算機中,稱為ascaii編碼。最早的計算機以8個位元為乙個位元組,所以乙個位元組能表示最...

python 3字元編碼

在python2中預設是ascii編碼,python3是utf 8編碼 在python 的源 檔案中經常會看到 a 中文 type a str b bytes a,encoding utf 8 bb xe4 xb8 xad xe6 x96 x87 type b bytes 以上的 都在python ...

3 字元編碼

字元編碼 編者的話 從磁碟中讀取資料時,直接將存在檔案中的二進位制轉換成unicode的二進位制存到記憶體中,需指定乙個編碼如utf 8,前提是檔案在儲存時是以utf 8儲存的.系統中維護了一張關於utf 8到unicode的表,存檔案時,直接通過這張表將記憶體中unicode的二進位制翻譯成utf...