一.字元編碼基礎知識
1.計算機硬體包括cpu、硬碟、記憶體,其中cpu負責從記憶體中讀取指令並解碼執行。
作業系統和應用軟體執行時都是先把程式載入到記憶體中,然後應用程式通過呼叫作業系統提供的介面,來間接實現硬體的使用。
2.文字編輯器儲存原理
應用程式載入到記憶體中,先將編輯的內容儲存在記憶體中,然後通過點選儲存然後將檔案刷到硬碟上,確保在斷電後檔案內容不丟失。
3.python直譯器執行python檔案的原理
第三階段:python直譯器開始執行載入到記憶體中的**(在執行時才會識別python的語法,比如識別到定義了乙個變數,會在記憶體中開闢乙個新的空間來存放變數。)
二.什麼是字元編碼
計算機在通電時才能工作,而計算機只認識數字(高頻和低頻對應二進位制中的數字1和0)。
由於人們在進行交流時都是通過一連串字元來傳達意思的,為了能讓計算機為人們服務,這就需要這麼乙個過程:
字元------->翻譯--------->數字(乙個字元如何對應乙個或一串特定的數字)
以下兩個場景下涉及到字元編碼的問題:
1. 乙個python檔案中的內容是由一堆字元組成的(python檔案未執行時)
2. python中的資料型別字串是由一串字元組成的(python檔案執行時)
三.字元編碼的發展:
英美:ascii碼,乙個bytes代表乙個字元,1bytes=8bit
中文:gbk碼,2bytes代表乙個字元
為了方便各種語言之間的通訊,出現了萬國碼:unicode碼(所有字元都是2bytes),utf-8碼(對英文本元只用1bytes表示,對中文字元用3bytes)
注意:unicode:簡單粗暴,所有字元都是2bytes,優點是字元->數字的轉換速度快,缺點是占用空間大
utf-8:精準,對不同的字元用不同的長度表示,優點是節省空間,缺點是:字元->數字的轉換速度慢,因為每次都需要計算出字元需要多長的bytes才能夠準確表示
1.記憶體中使用的編碼是unicode碼,採用用空間換時間的策略(所有程式都需要先載入到 記憶體中才能執行)
2.硬碟中或者網路傳輸用utf-8,網路i/o或磁碟i/o延遲要遠大於utf-8的轉換延遲,而且i/0應該盡可能節省頻寬,保證傳輸資料的穩定
四.字元編碼的使用
2.亂碼的原因
第乙個:在編碼時已經亂碼,比如檔案內容中有中文和日文,而在往硬碟儲存時編碼格式是gbk,那麼日文就沒有與之匹配的對應關係,造成無法正確儲存,也就是資料損壞。
第二個:存檔案時不亂碼而讀檔案時亂碼,比如選擇了和儲存時不一樣的編碼方式,比如gbk碼儲存,utf-8碼讀取
總結:檔案以什麼編碼儲存,就以什麼編碼開啟
五.程式的執行
第一階段:啟動python直譯器
第三階段:讀取已經載入到記憶體中的**(unicode編碼的二進位制),然後執行,執行過程中可能會開闢新的記憶體空間
六.python2和python3的區別:
1.在python2中有兩種字串型別:str和unicode
2.在python3中也有兩種字串型別:str和bytes
檔案編碼與字元編碼
首先明確一點,檔案不存在什麼編碼 歸根結底檔案都是二進位制檔案,用ue開啟可以看到都是乙個個的16進製制數 只有檔案中的字元才可以說編碼。字元通過某種編碼組織起來存到檔案裡面,計算機通過這種編碼解析解析檔案,根據解析出來的文字繪製顯示到顯示裝置中,這樣我們就看到了文字。最初的計算機是又8個電晶體,通...
python 基礎 字元編碼
編碼基礎 由於每個國家都有自己的字元,所以其對應關係也涵蓋了自己國家的字元,但是以上編碼都存在侷限性,即 僅涵蓋本國字元,無其他國家字元的對應關係。應運而生出現了萬國碼,他涵蓋了全球所有的文字和二進位制的對應關係。unicode 2 4位元組 已經收錄136690個字元,並還在一直不斷擴張中.uni...
python基礎 字元編碼
任何乙個程式想要執行,必須先有硬碟載入到記憶體,然後由cpu去記憶體取只執行。執行著的應用程式的資料,必須在記憶體執行。python執行檔案的三步,首先把python檔案直譯器讀取到記憶體上,然後應用程式 文字檔案讀取到記憶體上,最後python直譯器對程式 進行編譯成計算機識別的 我們寫的檔案要想...