unicode字符和byte字符的理解

在python2中有兩種字符類型: str(bytes)unicode , 系統(tǒng)默認(rèn) str(bytes)
在python3中也有兩種字符類型: bytesstr(unicode) 系統(tǒng)默認(rèn) str(unicode)

在編碼界,每種編碼都有一張編碼表,記錄的是對(duì)應(yīng)的字符與數(shù)字的對(duì)應(yīng)關(guān)系.
我們所看到程序顯示的字符都是編碼表映射的字符,在計(jì)算機(jī)世界里其實(shí)就是一串?dāng)?shù)字
簡單理解就是:字節(jié)是計(jì)算機(jī)的語言,字符串是人類語言,它們之間通過編碼表形成一一對(duì)應(yīng)的關(guān)系
字節(jié)也叫做字節(jié)數(shù)組是二進(jìn)制數(shù)據(jù)組成的序列, 1字節(jié) == 8bit == 2位16進(jìn)制數(shù) == 數(shù)字0~255
ASCII編碼占用一字節(jié),且只用到了一字節(jié)中的一部分(31~27)

unicode和bytes的轉(zhuǎn)換

unicode --encode--> bytes
bytes --decode--> unicode

1bytes(字節(jié)) = 8位二進(jìn)制位(bit)
二進(jìn)制位的數(shù)值只有0和1,也就是說8位0或1組成一字節(jié)(bytes)
其實(shí)bytes就是ASCII碼

中文和字母在不同編碼中占用的字節(jié)

英文字母:

字節(jié)數(shù) : 1;編碼:GB2312

字節(jié)數(shù) : 1;編碼:GBK

字節(jié)數(shù) : 1;編碼:GB18030

字節(jié)數(shù) : 1;編碼:ISO-8859-1

字節(jié)數(shù) : 1;編碼:UTF-8

字節(jié)數(shù) : 4;編碼:UTF-16

字節(jié)數(shù) : 2;編碼:UTF-16BE

字節(jié)數(shù) : 2;編碼:UTF-16LE

 

中文漢字:

字節(jié)數(shù) : 2;編碼:GB2312

字節(jié)數(shù) : 2;編碼:GBK

字節(jié)數(shù) : 2;編碼:GB18030

字節(jié)數(shù) : 1;編碼:ISO-8859-1

字節(jié)數(shù) : 3;編碼:UTF-8

字節(jié)數(shù) : 4;編碼:UTF-16

字節(jié)數(shù) : 2;編碼:UTF-16BE

字節(jié)數(shù) : 2;編碼:UTF-16LE

代碼示例: python3環(huán)境

英文字符在unicode和bytes的區(qū)別
s1 = "aaa"
print(type(s1),len(s1))
>><class 'str'> 3
b1 = s1.encode("utf-8")
b2 = b"aaa"
print(type(b1),type(b2),b1==b2,len(s1)==len(b2))
>><class 'bytes'> <class 'bytes'> True True

上面的示例可以看出英文字符在unicode和bytes中占相同的字節(jié)

中文字母
s1 = "中"
print(type(s1),len(s1))
>><class 'str'> 1
b1 = s1.encode("utf-8")
# b2 = b"中文" # 注意不能這樣寫,這樣寫是會(huì)報(bào)錯(cuò)的 
print(type(b1),b1,len(b1))
>><class 'bytes'> b'\xe4\xb8\xad' 3

上面的示例其實(shí)就可以看出,python3默認(rèn)使用unicode字符,采用的默認(rèn)編碼是utf-8,以及一個(gè)中文占3個(gè)字節(jié)長度,所以在轉(zhuǎn)換編碼傳輸?shù)臅r(shí)候要注意數(shù)據(jù)的真正長度

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容