字符編碼的總體認識及若干問題

一.首選得弄明白一些概念,如下:

字符(Character)

一個文字就是一個字符。在計算機中,字符是用數字來表示的,不同的文字用不同的數字表示。

字符集(Character Set)

既然是“集”,也就是“集合”,“字符集”自然就是“一定量字符的集合”。

一個字符集包含了固定數量的字符,如ASCII字符集包含A-Z、a-z、0-9、半角標點符號和特殊控制符號(如換行符)在內的128個字符。

字符編碼(Encode)

編碼,意思是指將數據通過一定方式表達或儲存,這個方式就叫編碼。所以字符編碼就是字符的表現、儲存方式,也就是字符集的實現方式。

 

代碼頁(code page)

是每一種編碼方式的代號。這 是對照表:http://wenku.baidu.com/link?url=Aycytp_L-ogY1kPWq_Fc02sYrbpmPoIP-jPU6nfr73-Ap0nHYOEm2rShqS8Xiq3-k0NDgKpyoIijZY1yUwPG-ydXGJSYAan8X_rLP9Z5mBu

 

從上可以看出,字符集是字符的集合,字符編碼是把字符集的實現方式。但需要注意的是:有的字符編碼和字符集的名稱是一致的。


 

 

二.然後來看一幅我總結的圖:


首選是ASCII碼然後發展爲EASCII,它們沒有字符集和編碼格式的區別。

然後中國人發明了自己的漢字表示法--GB2312,之後又對它進行了擴充產生了GBK,它們的代碼頁都是cp936。再後來又產生了GB18030,對GBK再次進行了擴充,貌似還能表示日語和韓語,代碼頁是cp52936。這些的字符集和編碼方式命名相同。

世界人發明通用字符表示法—Unicode/UCS,它又分爲UCS-2和UCS-4,注意這只是字符集,是一張字符和序號對應的表而已。UTF-8/UTF-16/UTF-32纔是各種編碼實現,當然Unicode的編碼方式還有其他實現。

 

Unicode和UCS區別:原來它們是由兩個不同組織開發的,不過後來它們意識到了合併的必要性,於是現在基本沒區別了。

 

UCS-2和UCS-4區別:前者用兩個字節表示,後者用4個字節表示,因此後者比前者容量更大。UTF-8和UTF-16就是UCS-2的實現,UTF-32是UCS-4的實現。

 

混淆點:UTF-8不是UCS-2的實現嗎,怎麼有些字符編碼佔了3個字節?這裏的8不是指每個字符用8位表示,而是傳輸是按8位傳。至於爲什麼佔3個字節,前面說過UCS-2是字符集,它用16位編碼,但是沒有限定具體實現方式用什麼方式保存和傳輸,故UTF-8用1~3個字節保存或者傳輸。

 

以上只是個人理解,但實際上我也根據自己的理解解決了很多實際遇到的問題。


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