標籤:語言 解釋執行 ros test 1.5 byte 文本編輯 文字 電腦基礎知識
1. 電腦基礎知識(三幅圖)
2. 文字編輯器存取檔案的原理(nodepad++,pycharm,word)
開啟編輯器就開啟了啟動了一個進程,是在記憶體中的,所以在編輯器編寫的內容也都是存放與記憶體中的,斷電後資料丟失
因而需要儲存到硬碟上,點擊儲存按鈕,就從記憶體中把資料刷到了硬碟上。
在這一點上,我們編寫一個py檔案(沒有執行),跟編寫其他檔案沒有任何區別,都只是在編寫一堆字元而已。
3. python解譯器執行py檔案的原理 ,例如python test.py
1.第一階段,python解譯器啟動,相當於啟動了一個文字編輯器。
2.第二階段,python解譯器相當於文字編輯器,去開啟test.py檔案,從硬碟上將test.py的檔案內容讀入到記憶體中(小複習:pyhon的解釋性,決定瞭解釋器只關心檔案內容,不關心檔案尾碼名)
3.第三階段,執行剛剛載入在記憶體中的檔案代碼
總結:
python解譯器與文字編輯器的異同:
相同點:python解譯器是解釋執行檔案內容的,因而python解譯器具備讀py檔案的功能,這一點與文字編輯器一樣
不同點:文字編輯器存入記憶體是為了顯示,編輯,而python解譯器是為了執行。
二 什麼是字元編碼
電腦只能讀懂0,1即位元,如何讓電腦讀懂人類的字元,這就要通過一個轉換的過程,即字元-->(轉換)--數字
這個過程就可以稱作為字元編碼
三 字元編碼的發展史
階段一;現代電腦起源於美國,最早誕生也是基於英文考慮的ASCII
ASCll:一個Bytes帶表一個字元,一個Bytes=8bit 8bit可以表示0-2**8-1種變化,即可以表示256個字元
階段二:為了滿足中文,中國人定製了GBK
GBK:2Bytes代表一個字元
為了滿足其他國家,各個國家紛紛定製了自己的編碼
日本把日文編到Shift_JIS裡,韓國把韓文編到Euc-kr裡
這個時候就出現了Unicode 統一用2Bytes代表一個字元, 2**16-1=65535,可代表6萬多個字元,因而相容萬國語言
但對於通篇都是英文的文本來說,這種編碼方式無疑是多了一倍的儲存空間(二進位最終都是以電或者磁的方式儲存到儲存介質中的)
於是產生了UTF-8,對英文字元只用1Bytes表示,對中文字元用3Bytes
需要強調的一點是:
unicode:簡單粗暴,所有字元都是2Bytes,優點是字元->數位轉換速度快,缺點是佔用空間大
utf-8:精準,對不同的字元用不同的長度表示,優點是節省空間的,缺點是:字元->數位轉換速度慢,因為每次都需要計算出字元需要多長的Bytes才能夠準確表示
總結;
1.記憶體中使用的編碼是Unicode,用空間換時間
2.硬碟中或者網路中使用utf-8 ,穩定(空間還要小)
五 字元編碼的使用5.1 文字編輯器一鍋端Unicode--->encode-->utf-8utf-8-->decode-->Unicode
總結:
無論是何種編輯器,要防止檔案出現亂碼(請一定注意,存放一段代碼的檔案也僅僅只是一個普通檔案而已,此處指的是檔案沒有執行前,我們開啟檔案時出現的亂碼)
核心法則就是,檔案以什麼編碼儲存的,就以什麼編碼方式開啟
檔案test.py以gbk格式儲存,內容為:
x=‘林‘
無論是
python2 test.py
還是
python3 test.py
都會報錯(因為python2預設ascii,python3預設utf-8)
除非在檔案開頭指定#coding:gbk
5.2 程式的執行
python test.py (我再強調一遍,執行test.py的第一步,一定是先將檔案內容讀入到記憶體中)
階段一:啟動python解譯器
階段二:python解譯器此時就是一個文字編輯器,負責開啟檔案test.py,即從硬碟中讀取test.py的內容到記憶體中
此時,python解譯器會讀取test.py的第一行內容,#coding:utf-8,來決定以什麼編碼格式來讀入記憶體,這一行就是來設定python解譯器這個軟體的編碼使用的編碼格式這個編碼,
階段三:讀取已經載入到記憶體的代碼(unicode編碼的二進位),然後執行,執行過程中可能會開闢新的記憶體空間,比如x="egon"
記憶體的編碼使用unicode,不代表記憶體中全都是unicode編碼的二進位,
在程式執行之前,記憶體中確實都是unicode編碼的二進位,比如從檔案中讀取了一行x="egon",其中的x,等號,引號,地位都一樣,都是一般字元而已,都是以unicode編碼的二進位形式存放與記憶體中的
但是程式在執行過程中,會申請記憶體(與程式碼所存在的記憶體是倆個空間),可以存放任意編碼格式的資料,比如x="egon",會被python解譯器識別為字串,會申請記憶體空間來存放"hello",然後讓x指向該記憶體位址,此時新申請的該記憶體位址儲存也是unicode編碼的egon,如果代碼換成x="egon".encode(‘utf-8‘),那麼新申請的記憶體空間裡存放的就是utf-8編碼的字串egon了
python檔案處理
第五篇:python基礎之字元編碼