python之路 字元編碼 改進版1

2021-08-21 18:16:13 字數 1954 閱讀 8175

1.什麼是字元編碼

計算機是基於電工作的(產生高低電平),人們根據高低電平從邏輯的角度使高電平代表1,低電平代表0 ,所以機器語言的二進位制編碼是計算機所能直接認知的(無需轉換),而無論是組合語言還是高階語言它們的字元都需要根據某種對映關係使字元變成計算機所能理解的數字,這一過程就是字元編碼

字元  -------------(根據字元編碼表)---------->數字

2:為什麼要有字元編碼?

對於計算機,是將人類所寫的字元轉換為計算機所能理解的二進位制數字,提供計算機使用

對於人類,是將計算機內儲存的二進位制轉換為人類所能直觀理解的字元,提供人類使用

編碼表發展

3.1 最初的字元編碼表

計算機是美國人發明的,美國人使用的英文本元,加上符號字元,有一百多種,而一位二進位製所代表的狀態為兩種,所以美國人用8位二進位制數(256種狀態)來對映字元到數字的對應關係(第八位用於擴充套件,後來也加拉丁文寫入),這個編碼表就是ascll碼  --->乙個字元用八個bit表示,即乙個位元組

3.2 各國編碼表的誕生

隨著計算機在世界的普及,各國人發現ascll碼並沒有將自己國家的語言字元納入對映關係中,而且8位的二進位製所能代表的狀態也遠遠不夠,所以出現了中國的gbk,以16位二進位制數代表乙個中文字元,8位代表乙個英文本元(區分中文英文則靠高位元組,連續兩個高位元組即為中文),以及shift_jis編碼(日本),euc-kr編碼(南韓)

3.3 unicode的誕生

各國碼的誕生解決了自己國家的問題,但是用中國gbk編碼寫出來的軟體美國能使用嗎?為什麼?

3.3.1 與程式執行有關的三大硬體:cpu,記憶體,硬碟

3.3.2  如何執行python程式?  

1.python直譯器從硬碟載入到記憶體中 

2.儲存python的文字檔案從硬碟載入到記憶體中

3.python直譯器執行python語句(也只有這一階段涉及到語法的概念)

3.3.3 在這個階段,將字元寫到硬碟的過程:字元  --根據gbk/-shift_jis/-euc-kr->記憶體(臨時儲存這些格式的二進位制)---->硬碟中(這些格式的二進位制)

那麼,對於根據gbk寫入的資料,依照ascll是無法完成從記憶體二進位製到字元轉換過程的,由此誕生了unicode乙個包含unicode二進位制對應-------->字元<-----各國編碼二進位制對應的對映表(這是unicode必須擁有的特點,用於解決歷史問題),另乙個特點就是相容萬國,將所有國家的字元納入對映關係(用於統一,但這要時間)  ------->unicode用2個bytes表示所有字元,也固定了記憶體中使用的就是unicode字元編碼

3.4:utf-8的誕生

由於unicode是用2個bytes表示任何字元的(英文本元前八位全部補零),對於通篇的英文本元來說,多餘的i/o操作使傳輸速度變慢,再者記憶體資源的浪費,所以出現了utf-8(unicode transfoemation format),採用乙個位元組表示英文本元,三個位元組表示中文字元(生僻字可能更多)...

展望:對於舊的軟體(用各國編碼標準編寫的)---->用unicode所包含的unicode二進位制  ----->字元 <-------各國編碼二進位制的對映關係解決亂碼問題,對於新程式統一用utf-8字元編碼格式寫入硬碟,待舊程式不再使用後,記憶體中使用utf-8編碼,這時亂碼問題不再存在,而且,從記憶體到硬碟中,直接可以將utf-8格式的二進位制寫入硬碟(無需轉換)

Beetle遊戲改進版

在執行這個遊戲時,最後螢幕上顯示的是如下圖所示。甲蟲情況變成了beetle 60aeb0。原來在system.out.println beetle 中實際上用到了tostring方法,為了清楚表達甲蟲的情況,要重寫這一方法。在beetle類中加入下面重寫的tosting 方法 public stri...

六 改進版(Hit UFO)

2 實現 專案位址 參考部落格 按 adapter模式 設計圖修改飛碟遊戲 使它同時支援物理運動與運動學 變換 運動 飛碟起始位置隨機生成 vector3 startpos new vector3 unityengine.random.range 70,70 unityengine.random.r...

氣泡排序改進版

普通的氣泡排序的演算法的平均時間複雜度為o n 2 通過對一些特殊情況的研究,我們得出了這個改進版的氣泡排序,所以它的時間複雜度是 沒錯,還是o n 2 否則就叫不叫氣泡排序早就改名了 氣泡排序的時間消費主要是在比較以及交換的次數上,每一趟冒泡都會將當前序列最大的數 冒 到序列的最後,然後序列縮小乙...