Python之字符編碼(Day10)
1. python解釋器執行py文件的原理 ,例如python test.py
第一階段:python解釋器啟動,此時就相當於啟動了一個文本編輯器
第二階段:python解釋器相當於文本編輯器,去打開test.py文件,從硬盤上將test.py的文件內容讀入到內存中(小復習:pyhon的解釋性,決定了解釋器只關心文件內容,不關心文件後綴名)
第三階段:python解釋器解釋執行剛剛加載到內存中test.py的代碼( ps:在該階段,即執行時,才會識別python的語法,執行文件內代碼,執行到name="egon",會開辟內存空間存放字符串"egon")
2. unicode ,UTF-8
2.1 unicode的由來, 統一用2Bytes代表一個字符, 2**16-1=65535,可代表6萬多個字符,因而兼容萬國語言
作用: unicode:簡單粗暴,所有字符都是2Bytes,優點是字符->數字的轉換速度快,缺點是占用空間大
2.2 UTF-8的由來,但對於通篇都是英文的文本來說,這種編碼方式無疑是多了一倍的存儲空間(二進制最終都是以電或者磁的方式存儲到存儲介質中的)
於是產生了UTF-8,對英文字符只用1Bytes表示,對中文字符用3Bytes
作用: utf-8:精準,對不同的字符用不同的長度表示,優點是節省空間,缺點是:字符->數字的轉換速度慢,因為每次都需要計算出字符需要多長的Bytes才能夠準確表示
- 內存中使用的編碼是unicode,用空間換時間(程序都需要加載到內存才能運行,因而內存應該是盡可能的保證快)
- 硬盤中或者網絡傳輸用utf-8,網絡I/O延遲或磁盤I/O延遲要遠大與utf-8的轉換延遲,而且I/O應該是盡可能地節省帶寬,保證數據傳輸的穩定性。
2.3 字符編碼的使用
unicode ------->encode--------->UTF-8
UTF-8------->decode--------->unicode
3.1 分析過程
文件從內存刷到硬盤的操作簡稱存文件
文件從硬盤讀到內存的操作簡稱讀文件
註釋:
如果不在python文件指定頭信息#-*-coding:utf-8-*-,那就使用默認的
python2中默認使用ascii,python3中默認使用utf-8
3.2 在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‘>
本節總結
一
1.以什麽編碼存的就要以什麽編碼取出
ps:內存固定使用unicode編碼
我們可以控制的編碼是往硬盤存放或者基於網絡傳輸選擇編碼
2.數據是最先產生於內存中,是unicode格式,要想傳輸需要轉成bytes格式
#unicode ---------->encode(utf-8)---------->bytes
拿到bytes--------->decode(gbk)---------->unicode
3.python3中字符串被識別成unicode
python中的字符串encode得到bytes
二.
open:
1.會向操作系統發起系統調用,操作會打開一個文件
2.在python程序中會產生一個值指向操作系統打開那個文件,我們可以把該值賦給一個x。
回收資源
1.f.close(): 關閉操作系統打開的文件,即回收操作系統的資源
2.del f: 沒必要做,因為在python程序運行完畢後,會自動清理與該程序有關的所有內存占用
f = open(r‘aaaaa.py‘,‘r‘,encoding=‘utf-8‘) #print(f.read()) #print(f.readline(),end=") print(f.readlines()) f.close()
Python之字符編碼(Day10)