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之間的轉換
1view code#encode 編碼,將str轉換為bytes,轉換為bytes型別後,可以進行儲存和傳輸
2 s1 = '
alex'3
4#將s1這個在記憶體以unicode編碼方式儲存的字串轉換為bytes型別,使用utf-8編碼方式儲存的字串s11
5 s11 = s1.encode('
utf-8')
67print(s11) #
b'alex'
89 s2 = '中國'
1011 s22 = s2.encode('
utf-8')
12print(s22) #
b'\xe4\xb8\xad\xe5\x9b\xbd'
1314
#將s1這個在記憶體以unicode編碼方式儲存的字串轉換為bytes型別,使用gbk編碼方式儲存的字串s11
15 s22 = s2.encode('
gbk')16
print(s22) #
b'\xd6\xd0\xb9\xfa'
python3編碼宣告 python3編碼問題彙總
這兩天寫了個監測網頁的爬蟲,作用是跟蹤乙個網頁的變化,但執行了一晚出現了乙個問題。希望大家不吝賜教!我用的是python3,錯誤在對html response的decode時丟擲,原樣為 response urllib.urlopen dsturl content response.read dec...
在python3中的編碼
在python3中的編碼 author administrator date 2019 10 29 import sys print sys.getdefaultencoding utf 8 列印檔案的預設編碼 s ilike 特斯拉 s to gbk s.encode gbk encode 在編碼...
python3漢字編碼 Python3的編碼總結
python3編碼結論 python3的字串在記憶體中是用unicode 佔空間和頻寬 儲存的,所以不能直接用於儲存,傳輸。要通過其它編碼轉換成相對應的位元組碼 str encode byte byte decode str 常見的編碼 編碼是美國最先發明的,最先出來的是ascii編碼,最早計算機在...