碼錶的理解(ASCII,GBK,Unicode,UTF-8等)。

如下任何言論都徹底是我的的理解,若有雷同純屬巧合,若有錯誤,但願你們多多指出,共同窗習!謝謝!java

 

筆者是一個理解能力偏慢、稍鑽牛角尖的程序員,什麼東西都要從最基礎理解起,一步一步向上理解,所以講述時也是這樣,講述的也比較通俗,都是按照我的的理解來說述的,也請你們少安毋躁。程序員

 

在計算機中不管任何數據的傳輸、存儲、持久化,都是以二進制的形式體現的。學習

那麼當我存一個字符的時候,計算機須要持久化到硬盤,或者保存在內存中。編碼

這個時候保存在內存、硬盤的數據顯然也是二進制的。.net

那麼當我須要從硬盤、內存中取出這些字符,再顯示的時候,爲何二進制會變成了字符呢?3d

 

這就是碼錶存在的意義。code

 

碼錶其實就是一個字符和其對應的二進制相互映射的一張表。blog

 

這張表中規定了字符和二進制的映射關係。內存

 

計算機存儲字符時將字符查詢碼錶,而後存儲對應的二進制。get

 

計算機取出字符時將二進制查詢碼錶,而後轉換成對應的字符顯示。

 

大體能夠這樣理解。

 

By the way

不一樣的碼錶所容納的字符映射也是不一樣的。

 

在有些碼錶中一個字符佔用1個字節,1個字節能表示的範圍是-128到127,總共爲256。因此能容納256個字符映射。

 

而有的碼錶中一個字符佔用2個,甚至3個字節,所以能容納的字符映射也更多。

 

下面筆者按照本身的理解詳細講述一下不一樣的碼錶。

 

 

常見的碼錶:

 

ASCII:

美國碼錶,碼錶中只有英文大小寫字母、數字、美式標點符號等。每一個字符佔用1個字節,全部字符映射的二進制都爲正數,所以有128個字符映射關係。

GB2312:

兼容ASCII碼錶,並加入了中文字符,碼錶中包含英文大小寫字母、數字、美式標點符號佔一個字節,中文佔兩個字節,中文映射的二進制都是負數,所以有128× 128 = 16384個字符映射關係。

GBK/GB18030:

兼容GB2312碼錶,英文大小寫字母、數字、美式標點符號,佔一個字節。中文佔兩個字節,第一個字節爲負數,第二個字節爲正數和負數,由於有128× 256 = 32768個字符映射關係。

Unicode碼錶:

國際碼錶,包含各國大多數經常使用字符,沒個字符都佔2個字節,所以有65536個字符映射關係。Java語言使用的就是Unicode碼錶。

UTF-8碼錶:(是Unicode編碼表的一種實現形式

一樣是國際碼錶,但英文佔一個字節,中文佔3個字節。

 

 

實際存儲中看看具體的影響:

相關文章
相關標籤/搜索