python中字元,位元組,編碼格式等問題總結

2021-09-27 02:15:13 字數 2284 閱讀 5597

一直以來,對python中的字元,位元組,編碼格式理解的懵懵懂懂的,遇到問題總是搞不清楚,最近看一些網路傳輸方面的知識時,剛好要用到這些知識,總結一下以備以後複習。

首先說byte,也叫位元組,乙個位元組是8個bit。在python中,最小的資料儲存單位就是位元組,ascii碼中字元在python中都是佔乙個位元組的儲存位。

英文本元都包含在ascii編碼中,所以所有的英文本元都是佔1個位元組的,(注意字元和單詞的區別)

s=

'a'print

(s.encode(

'utf8'))

print

(s.encode(

'gbk'))

print

(len

(s.encode(

'gbk'))

)# 結果

b'a'

b'a'

1

因為計算機是美國人發明的,所以他們的英文字符集就很好處理,但是漢字的字元在計算機中應該怎麼儲存呢?這裡就牽扯到了編碼和解碼,針對漢字的編碼最常用的有utf8gbk,在網路傳輸或者字元儲存的時候就需要把字元先編碼成位元組碼,然後再傳送/儲存。在接收或讀取的時候進行解碼。

han =

'中'print

(len

(han)

)print

(han.encode(

'utf8'))

print

(han.encode(

'gbk'))

print

(len

(han.encode(

'utf8'))

)print

(len

(han.encode(

'gbk'))

)# 結果

1b'\xe4\xb8\xad'

b'\xd6\xd0'

32

在網路傳輸中對數字也是編碼成位元組碼進行傳輸的。int型字元直接呼叫int.to_bytes()方法進行編碼

i =

65print

(i.to_bytes(

4,byteorder=

'big'

,signed=

false))

print

(i.to_bytes(

8,byteorder=

'big'

,signed=

false))

# 結果

b'\x00\x00\x00a'

b'\x00\x00\x00\x00\x00\x00\x00a'

這樣就完成了對整型資料的編碼,解碼也是逆序,使用int.from_bytes()方法進行解碼:

i =

65i_byte_4 = i.to_bytes(

4,byteorder=

'big'

,signed=

false

)print

(i_byte_4)

i_byte_8 = i.to_bytes(

8,byteorder=

'big'

,signed=

false

)print

(i_byte_8)

i_decode_4 =

int.from_bytes(i_byte_4,byteorder=

'big'

,signed=

false

)print

(i_decode_4)

i_decode_8 =

int.from_bytes(i_byte_8,byteorder=

'big'

,signed=

false

)print

(i_decode_8)

# 結果

b'\x00\x00\x00a'

b'\x00\x00\x00\x00\x00\x00\x00a'

6565

需要特別注意的是:解碼時,from_bytes()中傳入的後兩個個引數要和to_bytes()嚴格對應,否則解碼肯定出錯

這裡注意的是,網路中傳送的資料報都是位元組碼,所以在傳送的時候,對不同的資料格式就要進行資料編碼,而在接收的時候同樣按照接收的資料的編碼方式進行解碼,這樣就能得到原始資料。

不同編碼格式中,位元組和字元的關係

ascii碼中 乙個英文本母 不分大小寫 佔乙個位元組的空間,乙個中文漢字佔兩個位元組的空間。乙個二進位制數字序列,在計算機中作為乙個數字單元,一般為8位二進位制數,換算為十進位制。最小值0,最大值255。utf 8編碼中 乙個英文本元等於乙個位元組,乙個中文 含繁體 等於三個位元組。unicode...

字元位元組區別,各種編碼格式作用

字元 由數字,字母,標點符號,各種符號。組成的都叫做字元。位元組 位元組是計算機中儲存容量的基本單位,1位元組是在計算機中是8位。也就是從 00000000到11111111。在計算機裡面,無論你什麼樣的檔案,到最後都會被轉為0,1的組成序列來表示,那麼問題來了,我們肯定要制定規則呀,比如00011...

位 位元組 編碼格式

位 bit 計算機中最小的資料單位。每一位的狀態只能是0或1。位元組 byte 儲存空間的基本計量單位,8個二進位制位構成乙個位元組 編碼格式 ascii 127個字元被編碼到計算機裡,也就是大小寫英文本母 數字和一些符號 unicode 把所有語言都統一到一套編碼裡,解決亂碼問題 gbk 有一位元...