Python基礎(字元編碼與檔案處理)

來源:互聯網
上載者:User

標籤:儲存空間   分析   起源   name   style   列印   字串   div   類型   

一、瞭解字元編碼的知識儲備

 1、電腦基礎知識(三副圖)

  

2、文字編輯器存取檔案的原理(notepad++,Pycharm,word)

  開啟編輯器就啟動了一個進程,是在記憶體中啟動並執行,所以在編輯器寫的內容在沒儲存之前都是存放在記憶體中的,斷電後資料就會丟失。因而需要儲存到硬碟上,點擊儲存按鈕,就從記憶體中把資料刷到硬碟上。

3、Python解譯器執行py檔案的與原理,例如python test.py

  第一階段:python解譯器啟動,此時就相當於啟動了一個文字編輯器。

  第二階段:python解譯器相當於文字編輯器,去開啟test.py檔案,從硬碟將test.py的檔案內容讀到記憶體中。

  第三階段:python解譯器解釋執行剛剛載入到記憶體中test.py的代碼。(PS:在該階段,即執行時,才會識別python的文法,執行檔案內代碼,執行到name=‘tracy‘,會開闢記憶體空間存放字串‘tracy‘)

總結:python解譯器與文字編輯器的異同

  相同點:python解譯器是執行檔案內容的,因而python解譯器具備都py檔案的功能,這一點與文字編輯器一樣

  不同點:文字編輯器將檔案內容讀入記憶體後,是未來顯示/編輯,而python解譯器將檔案讀入記憶體後,是為了執行(識別python文法)

二、什麼是字元編碼

 

  電腦要想工作必須通電,也就是說電驅使電腦幹活,而電的特性,就是高低電平。(高低電平即位元1,低電平即二進位0),也就是說電腦只認識數字。

  如何能讓電腦讀懂人類的字元?

  字元----->(翻譯過程)------>數字

  這個過程實際就是一個字元如何對應一個特定數位標準,這個標準稱之為字元編碼。

三、字元編碼的發展史

  階段一:現代電腦起源於美國,最早誕生也是基於英文考慮的ASCII

  ASCII:一個Bytes代表一個字元(英文字元/鍵盤上的所有其他字元),1Bytes=8bit,8bit可以表示0-2**8-1種變化,即可表示256個字元。

  階段二:為了滿足中文,中國人定製了GBK

  GBK:2Bytes代表一個字元

  階段三:日本人定製了Shift_JIS,韓國人定製了Euc-kr等等

  小結:各國有各國的標準,就會有不可避免的衝突,結果就是,在多語言混合的文本中,顯示出來就會有亂碼。

  於是產生了Unicode,同意用2B有特色代表一個字元,2**16-1=65535,可代表6萬多個字元,因而相容萬國語言。

  但是對於通篇都是英文的文本來說,這種編碼方式無疑是多了一倍的儲存空間。於是產生了utf-8,對英文字元只用1Bytes表示,對中文字元用3Bytes表示。

  unicode特性:簡單粗暴,所有字元都是2Bytes,優點是字元->數位轉換速度快,缺點是佔用空間打。

  utf-8特性:精準,對不同的字元用不同的長度表示,有點是節省空間的,缺點是:字元-->數位轉換速度慢,因為每次都需要計算出字元需要多長的Bytes才能夠準確表示。

  記憶體中使用的編碼是Unicode,用空間換時間。

  硬碟中或者網路傳輸用utf-8,網路I/O延遲或者磁碟I/O延遲要遠大於utf-8的轉換延遲,而且I/O應該是儘可能地節省頻寬,保證資料轉送的穩定性。

四、字元編碼的使用

  文字編輯器轉換圖

  Unicode--->encode----->utf-8

  uft-8--------->decode----->Unicode

  

   分析字元轉換過程:

   檔案從記憶體刷到硬碟的操作簡稱存檔案

   檔案從硬碟讀到記憶體的操作簡稱讀檔案

   分析亂碼:

  1、存檔案時就已經亂碼的情況;

  2、存檔案時不亂碼而讀檔案時亂碼;

  小結:  

  無論是何種編輯器,要防止檔案出現亂碼(請一定注意,存放一段代碼的檔案也僅僅只是一個普通檔案而已,此處指的是檔案沒有執行前,我們開啟檔案時出現的亂碼)

  核心法則就是,檔案以什麼編碼儲存的,就以什麼編碼方式開啟。

  python2預設ASCII,python3預設utf-8,除非檔案頭部指定編碼方式。

  針對python3如;

  

  在瀏覽網頁的時候,伺服器會吧動態產生的Unicode內容轉換為UTF-8再傳輸到瀏覽器

  如果服務端encode的編碼格式是utf-8,用戶端記憶體中收到的也是uft-8編碼的二進位。

 

  在python3中也有兩種字串類型str和bytes

  str是Unicode 

#coding:utf-8
s=‘林‘ #當程式執行時,無需加u,‘林‘也會被以unicode形式儲存新的記憶體空間中,#s可以直接encode成任意編碼格式s.encode(‘utf-8‘)s.encode(‘gbk‘)print(type(s)) #<class ‘str‘>

bytes是bytes

#coding:utf-8s=‘林‘ #當程式執行時,無需加u,‘林‘也會被以unicode形式儲存新的記憶體空間中,#s可以直接encode成任意編碼格式s1=s.encode(‘utf-8‘)s2=s.encode(‘gbk‘)print(s) #林print(s1) #b‘\xe6\x9e\x97‘ 在python3中,是什麼就列印什麼print(s2) #b‘\xc1\xd6‘ 同上print(type(s)) #<class ‘str‘>print(type(s1)) #<class ‘bytes‘>print(type(s2)) #<class ‘bytes‘>

 

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.