第五篇:python基礎之字元編碼

來源:互聯網
上載者:User

標籤:語言   解釋執行   ros   test   1.5   byte   文本編輯   文字   電腦基礎知識   

1. 電腦基礎知識(三幅圖)

2. 文字編輯器存取檔案的原理(nodepad++,pycharm,word)

開啟編輯器就開啟了啟動了一個進程,是在記憶體中的,所以在編輯器編寫的內容也都是存放與記憶體中的,斷電後資料丟失

             因而需要儲存到硬碟上,點擊儲存按鈕,就從記憶體中把資料刷到了硬碟上。

             在這一點上,我們編寫一個py檔案(沒有執行),跟編寫其他檔案沒有任何區別,都只是在編寫一堆字元而已。

 3python解譯器執行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基礎之字元編碼

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.