1.計算機基礎知識node
2.電腦存放組成:python
硬盤 - 內存 -(二級緩存、一級緩存、cpu寄存器)- cpu
# cpu交互的是用戶能識別的數據:字符
# 硬盤中最終存儲的數據:0,1的二進制數據(能夠直接轉化爲電腦能識別的高低電頻)
3.文本編輯器存取文件的原理(nodepad++,pycharm,word)
#一、打開編輯器就打開了啓動了一個進程,是在內存中的,因此,用編輯器編寫的內容也都是存放與內存中的,斷電後數據丟失 #二、要想永久保存,須要點擊保存按鈕:編輯器把內存的數據刷到了硬盤上。 #三、在咱們編寫一個py文件(沒有執行),跟編寫其餘文件沒有任何區別,都只是在編寫一堆字符而已
4.python解釋器執行py文件的原理 ,例如python test.py編程
#第一階段:python解釋器啓動,此時就至關於啓動了一個文本編輯器 #第二階段:python解釋器至關於文本編輯器,去打開test.py文件,從硬盤上將test.py的文件內容讀入到內存中(小複習:pyhon的解釋性,決定了解釋器只關心文件內容,不關心文件後綴名) #第三階段:python解釋器解釋執行剛剛加載到內存中test.py的代碼( ps:在該階段,即真正執行代碼時,纔會識別python的語法,執行文件內代碼,當執行到name="egon"時,會開闢內存空間存放字符串"egon")
5.總結python解釋器與文件本編輯的異同緩存
#一、相同點:python解釋器是解釋執行文件內容的,於是python解釋器具有讀py文件的功能,這一點與文本編輯器同樣 #二、不一樣點:文本編輯器將文件內容讀入內存後,是爲了顯示或者編輯,根本不去理會python的語法,而python解釋器將文件內容讀入內存後,可不是爲了給你瞅一眼python代碼寫的啥,而是爲了執行python代碼、會識別python語法。
1. 什麼是字符編碼網絡
計算機要想工做必須通電,即用‘電’驅使計算機幹活,也就是說‘電’的特性決定了計算機的特性。電的特性即高低電平(人類從邏輯上將二進制數1對應高電平,二進制數0對應低電平),關於磁盤的磁特性也是一樣的道理。結論:計算機只認識數字 很明顯,咱們平時在使用計算機時,用的都是人類能讀懂的字符(用高級語言編程的結果也無非是在文件內寫了一堆字符),如何能讓計算機讀懂人類的字符? 必須通過一個過程: #字符--------(翻譯過程)------->數字 #這個過程實際就是一個字符如何對應一個特定數字的標準,這個標準稱之爲字符編碼
# 字符編碼:將人識別的字符轉換計算機能識別的01,轉換的規則就是字符編碼表
2.涉及到字符編碼的問題編程語言
#一、一個python文件中的內容是由一堆字符組成的,存取均涉及到字符編碼問題(python文件並未執行,前兩個階段均屬於該範疇) #二、python中的數據類型字符串是由一串字符組成的(python文件執行時,即第三個階段)
3.字符編碼的發展史與分類編輯器
計算機由美國人發明,最先的字符編碼爲ASCII,只規定了英文字母數字和一些特殊字符與數字的對應關係。ide
最多隻能用 8 位來表示(一個字節),即:2**8 = 256,因此,ASCII碼最多隻能表示 256 個符號編碼
固然咱們編程語言都用英文沒問題,ASCII夠用,可是在處理數據時,不一樣的國家有不一樣的語言,日本人會在本身的程序中加入日文,中國人會加入中文。spa
而要表示中文,單拿一個字節表表示一個漢子,是不可能表達完的(連小學生都認識兩千多個漢字),解決方法只有一個,就是一個字節用>8位2進製表明,位數越多,表明的變化就多,這樣,就能夠儘量多的表達出不通的漢字
因此中國人規定了本身的標準gb2312編碼,規定了包含中文在內的字符->數字的對應關係。
日本人規定了本身的Shift_JIS編碼
韓國人規定了本身的Euc-kr編碼
# 最先期對應關係:ascii編碼表 - 存放的是英文數字與機器二進制的對應關係 # 數字70對應ascii表,指向的是字母'F' print(chr(70)) # 'F' print(ord('f')) # 102 # 字符所佔字節數 # 1字節 = 8個二進制位 00000000 ~ 11111111 256個數字 -128 ~ 127 # 中文 # GBK: 16個二進制位 15個0到15個1 # 兼容ascii,一個字母或數字佔一個字節 # 2w多漢字,用兩個字節進行存儲 # 國際上交流: # 一條信息中,可能同時出現英文/中文/日文/韓文,將全部信息存儲,且不亂碼 # 萬國編碼表:unicode # unicode採用兩個字節存放數據:utf-8,utf-16 # utf-8採用變長存儲:1字節存放數字與英文,3字節存放漢字 # utf-16採用定長存儲:均以2字節存放數字,英文,漢字 # 內存中用utf-16存取數據:定長存取效率高(變長鬚要計算後才存取) # cpu中與硬盤中,採用utf-8存放數據(utf-8傳輸更快)
4.總結字符編碼的發展可分爲三個階段
#階段一:現代計算機起源於美國,最先誕生也是基於英文考慮的ASCII ASCII:一個Bytes表明一個字符(英文字符/鍵盤上的全部其餘字符),1Bytes=8bit,8bit能夠表示0-2**8-1種變化,便可以表示256個字符 ASCII最初只用了後七位,127個數字,已經徹底可以表明鍵盤上全部的字符了(英文字符/鍵盤的全部其餘字符),後來爲了將拉丁文也編碼進了ASCII表,將最高位也佔用了 #階段二:爲了知足中文和英文,中國人定製了GBK GBK:2Bytes表明一箇中文字符,1Bytes表示一個英文字符 爲了知足其餘國家,各個國家紛紛定製了本身的編碼 日本把日文編到Shift_JIS裏,韓國把韓文編到Euc-kr裏 #階段三:各國有各國的標準,就會不可避免地出現衝突,結果就是,在多語言混合的文本中,顯示出來會有亂碼。如何解決這個問題呢???#一、可以兼容萬國字符 #二、與全世界全部的字符編碼都有映射關係,這樣就能夠轉換成任意國家的字符編碼 # 總結:內存中統一採用unicode,浪費空間來換取能夠轉換成任意編碼(不亂碼),硬盤能夠採用各類編碼,如utf-8,保證存放於硬盤或者基於網絡傳輸的數據量很小,提升傳輸效率與穩定性。
6.字符編碼總結
# 一、但凡出現亂碼問題,必定是編碼時用了一套字符編碼,解碼時用了另外一套字符編碼 # 二、解決亂碼問題核心:編碼時用什麼編碼存,解碼時就用什麼編碼解 # 三、python3解釋器默認使用utf-8 Python2解釋器默認使用ASCII # 四、文件開頭:#coding:gbk 用來告訴解釋器讀文件內容時,用什麼編碼 # 五、Python3中str類型內存用的是Unicode編碼的二級制
# 原文本字符串數據 # s1 = 'abc123你好' s1 = u'abc123你好' print(s1) # 二進制字符串數據: 數據傳輸是以字節爲單位,要將原文字符串轉換爲二進制字符串機械能傳輸 # 編碼 res = s1.encode('utf-8') print(res) # 解碼 s2 = res.decode('utf-8') print(s2) ss2 = b'abc123\xe4\xbd\xa0\xe5\xa5\xbd\xe5\xa5\xbd\xe5\xa5\xbd' print('>>', ss2.decode('utf-8')) # 原義字符串數據 s3 = r'你好\n好的' print(s3) # s4 = 'D:\\nbpython\\day03\\代碼\\4.三種字符串.py' # print(s4) s4 = r'D:\nbpython\day03\代碼\4.三種字符串.py' print(s4)