任何乙個程式想要執行,必須先有硬碟載入到記憶體,然後由cpu去記憶體取只執行。執行著的應用程式的資料,必須在記憶體執行。python執行檔案的三步,首先把python檔案直譯器讀取到記憶體上,然後應用程式**文字檔案讀取到記憶體上,最後python直譯器對程式**進行編譯成計算機識別的**。
我們寫的檔案要想之後還可以檢視,檔案就要儲存到硬碟中。其過程就是計算機將字元對應字元編碼表翻譯成二進位制數存入硬碟。早期計算機使用英文本元,存入硬碟占用1btes,也就是八位二進位制(8bts),
輸入字元 >>>>>>(字元編碼表)>>>>> 二進位制數
#儲存單位小知識
8bits =1bytes
1024byes =1kb
1024kb =1mb
1024mb =1gb
1024gb =1t
1024t = 1p
後來各個國家也是用計算機,但是使用英文十分不方便。各個國家都繪製自己的編碼表,中國是用gbk編碼表,中文字元佔2btes。日本使用shift-jis編碼表,南韓使用ecu-kr編碼表。
萬國碼unicode
萬國碼unicode出現,它可以相容各國語言,各國語言都可以識別。unicode編碼統一所有字元都佔2btes。但是這種編碼也有缺點,就是浪費儲存空間,程式執行效率低。在此基礎上出現了優化的utf-8編碼。utf-8編碼會將unicode用文字夫由原來的2btes變成1btes,將中文的2btes變成3btes存入硬碟中。
對於存入檔案的過程可以理解為:
資料儲存到硬碟
1, 記憶體中的unicode格式二進位制資料數字 >>>>> (encod) >>>> utf-8
硬碟中的資料有硬碟讀到記憶體
1, 硬碟中的utf-8格式的二進位制資料 >>>>解碼(decode) >>>unincode格式的二進位制資料
要明白的是使用者輸入分時候,無論輸入什麼字元都能夠相容萬國字元。其他國家的資料有硬碟讀到記憶體的時候unicode與其他各個國家的編碼都有對應關係。
在python2預設使用ascii碼(因為在開發pyhon2直譯器時uniocode還沒有盛行),而在python3中預設使用的是utf-8。python3字串預設使用unicode編碼格式的二進位制數
檔案頭在檔案中的字元編碼執行之前,要明白的是,檔案以什麼格式存入硬碟就應該以什麼格式讀出來。可以想象這樣乙個場景,發密電碼,傳送者以一種編碼方式發出,解碼者就必須一相同編碼方式才能解密。如果不是,那麼將會得到一堆亂碼。計算機也是如此
# 以gbk格式存入編碼,以utf-8格式解碼a = '學習' # 資料字串『學習』
a1 = a.encode('gbk') # 以gbk格式存入
a2 = a1.decode('utf-8') # 以utf-8格式讀出
print(a2) # 結果是可以讀但是無法解碼,導致亂碼
ѧϰ
# 以gbk格式存入,以gbk格式讀出
a = '學習' # 資料字串『學習』
a1 = a.encode('gbk') # 以gbk格式存入
a2 = a1.decode('gbk') # 以utf-8格式讀出
print(a2)
學習
總結:在讀取檔案的時候,如果亂碼,很大可能就是讀的時候與存入編碼格式不同所致
(在檔案看到:# coding:utf-8 ,它的意思告訴直譯器用utf-8編碼解碼。)
python 基礎 字元編碼
編碼基礎 由於每個國家都有自己的字元,所以其對應關係也涵蓋了自己國家的字元,但是以上編碼都存在侷限性,即 僅涵蓋本國字元,無其他國家字元的對應關係。應運而生出現了萬國碼,他涵蓋了全球所有的文字和二進位制的對應關係。unicode 2 4位元組 已經收錄136690個字元,並還在一直不斷擴張中.uni...
Python 基礎 字元編碼
python 直譯器在載入 py 檔案中的程式碼時,會對內容進行編碼 預設 ascill ascii american standard code for information interchange,美國資訊交換標準程式碼 是基於拉丁字母的一套電腦編碼系統,主要用於顯示現代英語和部分支援其他西歐...
python基礎之字元編碼
1.什麼是字元編碼?字元 標準 字元編碼 數字 2.為什麼要編碼?讓計算機認識人的字元 3.常見的字元編碼 ascii 乙個bytes代表乙個字元 英文本元 鍵盤上的所有其他字元 1bytes 8bit,8bit可以表示0 2 8 1種變化,即可表示256個字元 gbk 2bytes代表乙個字元,由...