編碼理解

在計算機內部,所有信息都表示成二進制01,若要顯示出來讓人看懂,需要進行編碼轉換。如漢字”嚴”以 Unicode編碼保存到計算機中是4E25,即01001110 00100101,顯示給用戶看時,通過Unicode編碼表查看4E25對應的是”嚴”,顯示出來。
編碼的發展過程:

(1)ASCII碼

字節是計算機存儲的基本單位,一字節等於八位(1byte = 8bit)。一個字節可以表示256種狀態(00000000-11111111)。因此ASCII碼被髮明來表示128個字符(00000000-01111111),只佔用後七位,第一位默認爲0。其中包含所有英文字母及其他一些字符,如大寫字母”A”表示爲01000001(10進製爲65)。

(2)ASCII碼加強

有些國家不用英文,自己利用字節最高位創造了一些其他字符,多表示了ASCII碼除外的128個字符。如法語é表示爲10000010。

(3)ISO-8859-1

各個組織各搞各的沒有標準很混亂,ISO 組織發明了ISO-8859-1涵蓋了大多數西歐語言字符,總共能表示 256 個字符。

(4)GB2312

中國自己發明了GB2312來表示中文,雙字節,編碼範圍是 A1-F7。

(5)GBK

GB2312表示的漢字太少,GBK 擴展了,編碼範圍是 8140-FEFE(去掉 XX7F)總共能表示23940個字符。

(6)Unicode

編碼過多,每次打開文件都得判斷是哪種編碼,進行對應的編碼轉換,而且系統必須支持。爲了統一編碼,出現了Unicode。Unicode涵蓋了所有字符集。如漢字”嚴”,Unicode編碼爲4E25。

(7)UCS

UCS(Unicode Character Set),Unicode的簡稱。目前有兩種格式:UCS-2和UCS-4。UCS-2就是用兩個字節編碼,UCS-4就是用4個字節編碼。

(8)UTF-8

Unicode只是一個概念,表示一個字符和二進制對應關係表,若直接存儲進計算機會出現問題。如漢字”嚴”,Unicode編碼爲4E25,二進制爲01001110 00100101,直接存儲二進制,和ASCII碼串”N%”(也是01001110 00100101)存儲內容一樣,無法區分。
UTF-8就是爲了專門存儲Unicode而產生,規則如下:
1. ASCII碼保持不變,依然是0xxxxxxx
2. 對於其他 n 字節(n>1)的字符,第一個字節的前n位都爲1,第n+1位爲0,後面字節的前兩位爲10,其他沒提及的二進制位,全部爲這個字符的unicode碼。

Unicode符號範圍 UTF-8編碼方式
0000 0000-0000 007F 0xxxxxxx
0000 0080-0000 07FF 110xxxxx 10xxxxxx
0000 0800-0000 FFFF 1110xxxx 10xxxxxx 10xxxxxx
0001 0000-0010 FFFF 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx

(9)UTF-16

UTF-8以單字節(8bit)爲基礎單位,UTF-16以雙字節(16bit)爲基本單位。其中BMP(基本多語言平面,U+0000至U+FFFF)雙字節,包含了最常用的字符,與Unicode編碼一致;其他的是輔助平面,四字節。
多字節存儲存在讀取大小端問題,”大頭方式”(Big endian),第二個字節在前就是”小頭方式”(Little endian)。
Unicode規範中定義,每一個文件的最前面分別加入一個表示編碼順序的字符,如果一個文本文件的頭兩個字節是FE FF,就表示該文件採用大頭方式;如果頭兩個字節是FF FE,就表示該文件採用小頭方式。

(10)UTF-32

UTF-32以四字節(32bit)爲基礎單位,足夠存儲所有字符。

github 地址

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章