1、二進位制
計算機只能儲存和識別二進位制,但是人類常用的字母、數字、漢字怎麼用計算機儲存和識別呢?
人類強行約定一個對應表,把數字、字母和數字進行對應上,這樣就可以用二進位制表示字母和數字了。
2、ASCII編碼
ASCII是美國於1967年建立,只有127個字母和數字(後面擴充套件128個,一共255個),用8位二進位制來表示。
⼀個空格對應的數字是0, 翻譯成⼆進位制就是00000000
⼀個對勾√對應的數字是251 ,翻譯成⼆進位制就是11111011
3、計算機容量單位
二進位制的每⼀位0或者1所佔的空間單位為bit(⽐特),這是計算機中最⼩的表示單位。
每8個bit組成⼀個位元組,這是計算機中最⼩的儲存單位。
4、GB2312和GBK
中國自己1980年設計的GB2312編碼表,一共存6763個漢字,用2個位元組表示一個漢字。
但是如果中英文混合的情況,中文用2個位元組GB2312,英文用ASCII編碼。
中英文區別規則:
如 果2個位元組連在⼀起,且每個位元組的第1位(也就是相當於128的那個2進位制位)如果是1,就代表這是個中 ⽂,這個⾸位是128的位元組被稱為⾼位元組。 也就是2個⾼位元組連在⼀起,必然就是⼀箇中⽂。 你怎麼如 此篤定?因為0-127已經表示了英⽂的絕⼤部分字元,128-255是ASCII的擴充套件表,表示的都是極特殊的 字元,⼀般沒什麼⽤。所以中國⼈就直接拿來⽤了。
1995年擴充套件升級了GB2312,增加了很多生僻字、字元、藏語、維吾爾語等,叫GBK,現在windows的中文版本編碼預設就是GBK。
5、編碼戰國時代--出現Unicode
各個國家都搞出自己的編碼,不同國家軟體流通就遇到問題。Unicode應運⽽⽣。Unicode把所有語⾔都統⼀到⼀套編碼⾥,這樣就不會再有亂碼問題了。
Unicode 2-4位元組 已經收錄136690個字元,並還在⼀直不斷擴張中…
Unicode標準也在不斷髮展,但最常⽤的是⽤兩個位元組表示⼀個字元(如果要⽤到⾮常偏僻的字元,就 需要4個位元組)
Unicode特點:
1. ⽀持全球所有語⾔
2. 可以跟各種語⾔的編碼⾃由轉換,也就是說,即使你gbk編碼的⽂字 ,想轉成unicode很容易。
Unicode跟所有語言都有對應關係,可以很容易進行互相轉換。
6、UTF-8的出現
如果你寫的⽂本基本上全 部是英⽂的話,⽤Unicode編碼⽐ASCII編碼需要多⼀倍的儲存空間,由於計算機的記憶體⽐較⼤,並且 字串在內容中表示時也不會特別⼤,所以內容可以使⽤unicode來處理,但是儲存和⽹絡傳輸時⼀般 資料都會⾮常多,那麼增加1倍將是⽆法容忍的!!!
為了解決儲存和⽹絡傳輸的問題,出現了Unicode Transformation Format,學術名UTF,即:對 unicode字元進⾏轉換,以便於在儲存和⽹絡傳輸時可以節省空間!
UTF-8: 使⽤1、2、3、4個位元組表示所有字元;優先使⽤1個位元組、⽆法滿⾜則使增加⼀個位元組, 最多4個位元組。英⽂佔1個位元組、歐洲語系佔2個、東亞佔3個,其它及特殊字元佔4個
UTF-16: 使⽤2、4個位元組表示所有字元;優先使⽤2個位元組,否則使⽤4個位元組表示。
UTF-32: 使⽤4個位元組表示所有字元;
UTF 是為unicode編碼 設計 的⼀種 在儲存 和傳輸時節省空間的編碼⽅案。
7、編碼彙總一覽表
8、Py2 Vs Py3編碼
python⽣下來的時候 還沒有unicode&utf-8, 所以⻳叔選⽤的預設編碼只能是ASCII, ⼀直到py2.7,⽤的 還是ASCII, 導致Py預設只⽀持英⽂,想⽀持其它語⾔,必須單獨配置。
到了Py3推出後,終於把預設編碼改成了unicode, 同時⽂件儲存編碼變成了utf-8,意味著,不⽤任何聲 明,你就可以寫各種語⾔⽂字在你的Python程式⾥。 從此,程式們⼿牽⼿過上了快樂的⽣活。
16進位制
16進位制在計算`機領域應⽤普遍,常⻅的有html\css的顏⾊表、mac地址、字元編碼等都⽤16進位制來表 示。 這是因為將4個位元(Bit)化成單獨的16進位制數字不太困難。1位元組可以表示成2個連續的16進位制 數字。可是,這種混合表示法容易令⼈混淆,因此需要⼀些字⾸、字尾或下標來顯示,在C語⾔、C++、 Shell、Python、Java語⾔及其他相近的語⾔使⽤字⾸“0x”來標示16進位制,例如“0x5A3”代表1443。
9、不同字元的轉換
GBK編碼的字元如何轉成utf-8儲存