python之字元編碼的重要思想

2022-03-05 08:53:33 字數 1482 閱讀 7218

#1

、保證不亂碼的核心法則就是,字元按照什麼標準而編碼的,就要按照什麼標準解碼,此處的標準指的就是字元編碼

#2、在記憶體中寫的所有字元,一視同仁,都是unicode編碼,比如我們開啟編輯器,輸入乙個「你」,我們並不能說「你」就是乙個漢字,此時它僅僅只是乙個符號,該符號可能很多國家都在使用,根據我們使用的輸入法不同這個字的樣式可能也不太一樣。只有在我們往硬碟儲存或者基於網路傳輸時,才能確定」你「到底是乙個漢字,還是乙個日本字,這就是unicode轉換成其他編碼格式的過程了

#補充:

瀏覽網頁的時候,伺服器會把動態生成的unicode內容轉換為utf-8再傳輸到瀏覽器

如果服務端encode的編碼格式是utf-8, 客戶端記憶體中收到的也是utf-8編碼的結果。

記憶體的編碼使用unicode,不代表記憶體中全都是unicode,

在程式執行之前,記憶體中確實都是unicode,比如從檔案中讀取了一行x="

egon

",其中的x,等號,引號,地位都一樣,都是普通字元而已,都是以unicode的格式存放於記憶體中的

但是程式在執行過程中,會申請記憶體(與程式**所存在的記憶體是倆個空間)用來存放python的資料型別的值,而python的字串型別又涉及到了字元的概念

比如x="

egon

",會被python直譯器識別為字串,會申請記憶體空間來存放字串型別的值,至於該字串型別的值被識別成何種編碼存放,這就與python直譯器的有關了,而python2與python3的字串型別又有所不同。

二 在python3 中也有兩種字串型別str和bytesstr是unicode

#coding:gbk

x='上' #當程式執行時,無需加u,'上'也會被以unicode形式儲存新的記憶體空間中,

print(type(x)) ##x可以直接encode成任意編碼格式

print(x.encode('gbk')) #b'\xc9\xcf'

print(type(x.encode('gbk'))) #

很重要的一點是:看到python3中x.encode('gbk') 的結果\xc9\xcf正是python2中的str型別的值,而在python3是bytes型別,在python2中則是str型別

於是我有乙個大膽的推測:python2中的str型別就是python3的bytes型別,於是我檢視python2的str()原始碼,發現

python之字元編碼

python3 d a.py 1 先啟動python直譯器 2 直譯器會將a.py的內容當成普通記憶體從硬碟讀入記憶體,此時沒有語法意義 3 直譯器會解釋執行剛剛讀入記憶體的記憶體,開始識別python語法 1 相同點 python直譯器是解釋執行檔案內容的,因而python直譯器具備讀py檔案的功...

python之字元編碼

1.以什麼編碼存的就以什麼編碼取出 記憶體固定使用unicode編碼 我們可以控制的編碼是往硬碟存放或者基於網路傳輸選擇編碼。2.資料是最先產生於記憶體中,是unicode格式,要想傳輸需要轉成bytes格式 unicode encode utf 8 bytes 拿到bytes,就可以往檔案記憶體存...

Python基礎之字元的編碼

python廖雪峰 計算機只能處理二進位制數字 0100111 要處理文字,就必須先把文字轉為數字才能處理,這個過程就叫編碼。由於計算機是美國人發明的,最早只有127個字元被編碼到計算機裡,包括大小寫英文本母 陣列和一些符號,這個編碼表被稱為ascii編碼,比如大寫字母a的編碼是65,小寫字母z的編...