day08:
知識儲備:
硬碟:由硬碟載入到記憶體,cpu從記憶體中取
軟體產生的資料都是先儲存在記憶體中
檔案,輸入文字,儲存到記憶體,記憶體是硬體,硬體只能儲存2進製,所以需要轉換
文字編輯器,輸入文字的時候,是乙個轉成二進位制儲存到記憶體,然後反解成文字顯示到螢幕的過程
字元編碼:
將字元轉換/編碼成二進位制
為什麼要用字元編碼:
計算機硬體是基於電工作的,只可以識別0,1二進位制數,為了使用更便捷的使用計算機,需將人類的語言轉換成二進位制,畢竟我們不能以二進位制與計算機溝通
第一台計算機是美國人發明的,最初的編碼為ascii碼,只可以識別英文本元,那個時候並不存在亂碼問題,因為程式到記憶體,記憶體到硬碟的編碼原則僅有ascii碼一種
英文本元加上符號有120種左右,使用7位二進位制數就可以將他們一一對應,考慮到後續擴充套件問題,採用了8個二進位制位代表乙個字元,1個位元組 =8bit,1個英文本元佔乙個位元組
各國都需要使用計算機,都創造了各自的編碼規則
中國的gbk編碼規則,用1個位元組代表乙個英文本元,用2個位元組代表1個中文字元
各國建立的編碼規則除了識別自己的語言都相容英文
規則的不同,導致了各國只能在本國使用計算機,為了解決這個問題,產生了萬國碼unicode
unicode字元編碼表:
建立時考慮的問題:
可以輸入萬國語言,可以對應各國二進位制
1.字元與二進位制的對應關係
2.與各種字元編碼的二進位制數字都有對應關係
但是unicode有乙個弊端,就是統一使用2個位元組來表示1個字元,如果都是英文本元的話,這將導致讀取效率變低
故產生了utf-8 編碼原則,utf-8 採用1個位元組表示英文本元,3個位元組表示1個中文字元
utf -8 提高了從記憶體到硬碟的訪問效率,但也帶來了弊端
我們從程式存入記憶體的編碼固定為unicode,這個是不可改的
而我們從記憶體存到硬碟中可以是gbk,ascii,utf-8編碼,這就導致了我們可能以一種編碼存,另一種編碼取,這將導致亂碼問題
解決亂碼問題的核心:
1.字元當初以什麼編碼存的,就應該以什麼編碼去讀
2.保證執行python程式的前兩個階段不亂碼的解決方案:新增檔案頭
在檔案首行#coding :檔案當初存的字元編碼
1.啟動文字編輯器
2.文字編輯器將檔案內容讀入記憶體
3.將讀入記憶體的內容顯示到螢幕上
python直譯器執行乙個py檔案的三個過程
1.啟動python直譯器
2.將py檔案的內容當做普通的文字檔案讀入記憶體,沒有語法的概念
3.解釋執行
檔案編輯器和python直譯器開個乙個檔案,在前兩個環節都一樣
在第三階段python**中有資料型別str,也是字元,python直譯器執行時,需要申請記憶體位址去放字串
這又涉及了編碼原則,python3直接將字串以unicode二進位制存入,因為在我們從記憶體讀取資料的時候,記憶體存放的就是字串的unicode的二進位制
而python2 預設以ascii二進位制將字串存入記憶體,這樣在取值的時候又存在亂碼的隱患,python2中將字串以unicode二進位制方式存入記憶體的方法為在字串前加小寫u
例s = u「haha」
day08字元編碼問題
1.把字元讀入python直譯器 python直譯器相當於文字編輯器 字元編碼 2.識別字元 3.往終端列印結果 字元編碼 第一步解決方法 python2預設使用ascill碼讀入字元 python3預設使用utf8 可以使用coding gbk 修改為 gbk讀入字元 第二步解決方法 python...
學習筆記day08
單例設計模式 上圖中,想要實現a,b的配置資訊共享,因為a,b是兩個new,所以必然是不同的物件,一種方法就是將其配置資訊全部設成靜態,但資訊很多時會導致儲存資訊過多。單例設計模式流程 1,主函式main進棧,定義s1 2,等號右邊,single載入進入方法區,接著是single的建構函式。s和ge...
Day08 強制轉換
int i 128 byte c byte i 記憶體溢位 double b i 自動轉換 低 高 自動轉換 低 高 system.out.println i 128 system.out.println c 128 system.out.println b 1.不能對布林值進行轉換 2.不能把物件...