1. 程式人生 > >Python之字符編碼(Day10)

Python之字符編碼(Day10)

方式 encode 編輯器 字符串類型 python文件 介質 odin 進制 mage

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才能夠準確表示

  1. 內存中使用的編碼是unicode,用空間換時間(程序都需要加載到內存才能運行,因而內存應該是盡可能的保證快)
  2. 硬盤中或者網絡傳輸用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(raaaaa.py,r,encoding=utf-8)
#print(f.read())

#print(f.readline(),end=")
print(f.readlines())
f.close()

Python之字符編碼(Day10)