02 字元編碼發展歷史 檔案操作

2021-10-08 03:25:28 字數 4792 閱讀 5556

1.程式執行與三大核心硬體的關係

程式最先都是存放於硬碟之中的

程式執行時是先把程式從硬碟中載入到記憶體中去

然後cpu從記憶體中讀取資料和指令執行

2.程式產生的資料最初都是存放於記憶體中

3.python程式執行的三個步驟:

如:python3 d:\a.py

① 先啟動python直譯器

② 直譯器將檔案a.py中的內容當成普通記憶體從硬碟載入到記憶體中(此時沒有語法意義)

③ 直譯器會解釋、執行剛剛讀入記憶體的內容,並識別python語法執行程式

字元-------(標準)---------數字

字元編碼表:存放字元與數字之間對應關係的表

1、ascii:只能識別英文本元

特點:採用8bit對應乙個英文本元,即乙個位元組(byte)
2、gbk:可以識別中文字元和英文本元

特點:採用16bit對應乙個字元(中英文都是16bit,即兩個位元組)
3、shift-jis:可以識別日文和英文本元

4、unicode:可以識別萬國字元

特點:採用兩個位元組對應乙個字元
字元-------->unicode格式的數字(對應著轉換成gbk、shift-jis、英文等所有的字元)

中文字元、英文本元---

----

----

-》unicode二進位制數---

----

----》gbk二進位制數

日文字元、英文本元---

----

----

-》unicode二進位制數---

----

----》shiftjis二進位制數

韓文本元、英文本元---

----

----

-》unicode二進位制數---

----

----》euc-kr二進位制數

萬國字元---

----

----

----

----

-》unicode二進位制數---

----

----》utf-

8二進位制數

5、utf-8

特點:

1byte對應乙個英文本元

3byte對應乙個中文字元

1、群雄割據

各國語言不統一,相互之間不相容

英文本元---

----

----

----記憶體:ascii二進位制數---

----

----

-->硬碟:ascii二進位制數

中文英文本元---

----

----

-記憶體:gbk二進位制數---

----

----

----

>硬碟:gbk二進位制數

日文英文本元---

----

----

-記憶體:shiftjis二進位制數---

----

--->硬碟:shiftjis二進位制數

韓文英文本元---

----

----

-記憶體:euc-kr二進位制數---

----

----

->硬碟:euc-kr二進位制數

2、過度階段

記憶體固定使用unicode格式,

人為可以改變由記憶體寫入硬碟的編碼格式

中文英文本元---

----

---記憶體:unicode

====

====gbk==

====

====

=>硬碟:gbk 二進位制數

日文英文本元---

----

---記憶體:unicode

====

====shif-jis==

====

>硬碟:shiftjis 二進位制數

韓文英文本元---

----

---記憶體:unicode

====

====euc-kr==

====

==>硬碟:euc-kr 二進位制數

萬國字元---

----

----

--記憶體:unicode

====

====utf-8==

*****==

>硬碟:utf-

8 二進位制數

3、分久必合

由於現階段部分舊的程式和資料仍然是用gbk、ascii等編碼格式儲存的,目前的記憶體都是unicode編碼格式,以便相容。

等過度階段成為歷史,記憶體預設的編碼格式將向utf-8轉變

萬國字元---

----

----

-記憶體:unicode

====

====

=utf-8==

====

====

==>硬碟:utf-

8二進位制數

萬國字元---

----

----

-記憶體:utf-8==

===無需轉碼直接寫入、讀取*****

>硬碟:utf-

8二進位制數

1、存的時候就已經亂了

採用的字元編碼表無法識別輸入的字元

存的時候就已經亂碼了,無法補救,取的時候解碼也會亂碼

解決方法:存入硬碟的編碼格式應該用utf-8格式
2、存的時候沒有亂

採用的字元編碼表可以識別輸入的字元

但是取的時候亂碼了:採用的字元編碼表與當初存的時候用的不是同一張表

解決方法:取的時候,解碼使用與存的時候一樣的編碼格式
即:

字元---

--編碼---

----

-》unicode格式的數字---

---編碼---

--》gbk格式的數字

字元----

-解碼---

----

-》unicode格式的數字《---

---解碼---

--gbk格式的數字

在檔案開頭加一行:

#coding:檔案存的時候的編碼格式
② 保證python執行第三個步驟不會亂碼:

使用python3(python3中字串型別的值都是以unicode格式的數字)

如果使用的是python2,在字串之前加字首 u

4.bytes

bytes型別可以理解為一種硬碟的原生格式
x =

'好'res1 = x.encode(

'gbk'

)res2 = x.encode(

'utf-8'

)print

(res1)

# b'\xba\xc3'

print

(res2)

# b'\xe5\xa5\xbd'

data1 = res1.decode(

'gbk'

)data2 = res2.decode(

'utf-8'

)print

(data1)

# 好print

(data2)

# 好

1、什麼是檔案?

檔案是作業系統提供給使用者/應用程式操作硬碟的一種功能(虛擬單位)

使用者/應用程式對硬碟的讀寫操作都是在對作業系統發起呼叫

作業系統在收到呼叫請求後,會將該請求轉換成具體的硬碟操作

2、為什麼要用檔案?

訪問硬碟必須使用檔案

應用程式操作檔案都是為了將記憶體中的資料永久儲存到硬碟中去

3、如何使用檔案?

f =

open

(file_path, mode)

f.write(data)

f.close(

)# 呼叫完以後要關柄操作,釋放作業系統資源

檔案操作與計算機三層結構的關係:

使用者/應用程式----------檔案物件/控制代碼----------->遙控器

作業系統---------------開啟檔案a.txt --------->空調

計算機硬體--------------硬碟

(1)檔案的路徑(找到檔案的位址)

絕對路徑:

windows系統中,如 r'd:\py\data\a.txt' ,字首r是為了規避檔案路徑中的轉義字元

linux系統中,如:/a/b/c/d.txt

相對路徑:基於程式所在的資料夾往後找,如 r'a.txt' ,(當前資料夾中的a.txt)

(2)檔案控制代碼(相當於乙個遙控器)

f =

open

(r'a.txt'

, mode=

'rt'

, encoding=

'utf-8'

)data = f.read(

)print

(data)

f.close(

)

01字元編碼

程式設計中經常用到字元編碼,常用字元編碼有ascii american standard code for information interchange 編碼 unicode編碼 unicode編碼又有utf 8形式和utf 16形式 ascii表如下 擴充套件ascii表如下 unicode是一...

49 字元編碼

目錄六.總結 開啟編輯器就啟動了乙個程序,是在記憶體中的,所以,用編輯器編寫的內容,也都是存放在記憶體中的,斷電後資料丟失。要想永久儲存,需要點選儲存按鈕 編輯器吧記憶體的資料刷到硬碟上。在我們編寫的乙個py檔案,沒有執行前,和編寫其它檔案沒有任何區別,都只是在編寫一堆字元而已。第三階段 pytho...

07 字元編碼

1.字元編碼 字元編碼針對的是文字無需考慮 視屏 音訊 等 2.編寫文字的過程 輸入的字元 字元編碼表 二進位制數字 2.1字元編碼表 就是字元與數字的對應關係 a 0 b 1 a 00 b 01 c 11 d 10 2.2ascii碼表 用八位二進位制表示乙個英文本元 所有的英文本元 符號最多也就...