標籤:形式 資料 opened ascii 傳輸 類型 技術分享 open 流量
1.編碼:
1.1 ASCII
一個字元佔8位,
1.2 UTF-8
一個字元佔8位
一個中文佔24位
1.3 GBK
一個字元佔8位
一個中文佔16位
1.4 Unicode
1.4 只說Unicode的32位
一個字元佔32位
一個中文字同樣佔32位
問題 : Unicode中的編碼方式能否utf-8中的編碼。 GBK的編碼方式能否識別utf-8中的編碼。
(1)各個編碼之間的二進位是不能互相識別的,會產生亂碼。
(2)傳輸或儲存用的不是GBK就是UTF-8,或者其他的佔用位元組少的,unicode是不能用的,因為unicode佔用32位,傳輸速率與流量消耗是極大的。GBK和UTF-8的轉換需要藉助於Unicode。
2. python3的字串在記憶體中是unicode 32位編碼方式。這樣會產生的問題,一個檔案傳輸過去後,對方不能直接用,因為是亂碼的,所以必須要用UTF-8或GBK的方式進行轉換儲存傳輸,使用encode將str轉換為bytes類型(將unicode轉換為utf-8或gbk等),bytes類型可以是以utf-8或gbk或其他的編碼進行編碼儲存的str。
2.1 bytes類型,一種資料類型。bytes類型的操作與字串類似,與str的區別是編碼方式不一樣,str的編碼是unicode,bytes的編碼是gbk或utf-8的。所以想要儲存或者傳輸一個字串、文章等,必須將編碼轉換為gbk或utf-8或ascii或gbkgbk2312等(bytes是這樣的編碼方式),所以str想要傳輸和儲存不能直接進行,需要轉換成bytes類型在進行儲存和傳輸。
對於英文:
str: 表現形式 s = ‘alex‘,編碼方式用的是unicode
bytes:s = b‘alex‘,編碼方式用的是utf-8、gbk等,但不是unicode
對於中文:
str:表現形式 s = ‘中國‘,編碼方式是unicode
bytes:表現形式 s = b‘\xe4\xb8\xad\xe5\x9b\xbd‘,編碼方式是utf-8、gbk。2個位元組就是gbk,3個位元組就是utf-8.
2.2 將unicode如何轉換成utf-8或gbk等,也就是str與bytes之間的轉換
1 # encode 編碼,將str轉換為bytes,轉換為bytes類型後,可以進行儲存和傳輸 2 s1 = ‘alex‘ 3 4 # 將s1這個在記憶體以unicode編碼方式儲存的字串轉換為bytes類型,使用utf-8編碼方式儲存的字串s11 5 s11 = s1.encode(‘utf-8‘) 6 7 print(s11) # b‘alex‘ 8 9 s2 = ‘中國‘10 11 s22 = s2.encode(‘utf-8‘)12 print(s22) # b‘\xe4\xb8\xad\xe5\x9b\xbd‘13 14 # 將s1這個在記憶體以unicode編碼方式儲存的字串轉換為bytes類型,使用gbk編碼方式儲存的字串s1115 s22 = s2.encode(‘gbk‘)16 print(s22) # b‘\xd6\xd0\xb9\xfa‘
View Code
Python3中的編碼