Python3中的編碼

2022-06-22 23:00:21 字數 1686 閱讀 2324

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')

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'

view code

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編碼,最早計算機在...