字元編碼與文字基礎

2022-01-22 11:08:31 字數 1774 閱讀 9065

一.字元編碼基礎知識

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直譯器對程式 進行編譯成計算機識別的 我們寫的檔案要想...