字符集編碼概述

1.big endian和little endian是CPU處理多字節數的不同方式

如‘漢’字的Unicode編碼是6C49。那麼寫到文件裏時若將6C寫在前面,就是big endian。將49寫在前面,就是little endian

2.字符編碼、內碼及漢字編碼

字符必須是編碼後才能被計算機處理,計算機使用的缺省編碼方式就是內碼。早期計算機使用8位的ASCII編碼(一個字節的編碼規範,代表一個字符),爲處理漢字設計GB2312用於簡體中文和big5用於繁體中文

GB2312(1980)共收錄7445個字符,包括6763個漢字和682個其它符號。漢字區的內碼範圍高字節從B0-F7,低字節從A1-FE,佔用碼位是72*94=6768。其中有5個空位是D7FA-D7FE。GB2312支持漢字太少,1995年漢字擴展規範GBK1.0收錄了21886個符號,它分爲漢字區和圖形符號區,漢字區包括21003個字符。 2000年的GB18030是取代GBK1.0的正式國家標準,該標準收錄27484個漢字,同時還收錄藏文、蒙文、維吾爾文等主要少數民族文字,現在的PC平臺必須支持GB18030,對嵌入式產品暫不作要求,所以手機、MP3一般只支持GB2312

從ASCII、GB2312、GBK到GB18030這些編碼方法是向下兼容的,即同一個字符在這些方案中總是有相同的編碼,後面標準支持更多的字符。在這些編碼中,英文和中文可以統一地處理,區分中文編碼的方法是高字節的最高位不爲0。有的中文Windows的缺省內碼還是GBK,可以通過GB18030包升級到GB18030。不過GB18030相對GBK增加的字符,普通人是很難用到,通常我們還是用GBK指代中文Windows內碼

3.Unicode、UCS和UTF

Unicode(至少以兩個字節表示,漢字是3個字節,英文字母是兩個字節)只與ASCII兼容(即ISO-8859-1兼容)與GB碼不兼容。Unicode是一種由國際組織設計的字符編碼方法,可容納全世界所有文字的編碼方案,學名是"Universal Multiple-Octet Coded Character Set"簡稱爲UCS。UCS可以看作是"Unicode Character Set"的縮寫

UCS只規定如何編碼,沒有規定如何傳輸、保存編碼。例如“漢”字的UCS編碼是6C49,可以用4個ascii數字來傳輸+保存這個編碼;也可用utf-8編碼:3個連續字節E6 B1 89來表示。關鍵在於通信雙方都認可。UTF-8、UTF-7、UTF-16都是被廣泛接受的方案,UTF-8的特別好處是它與ISO-8859-1完全兼容。UTF是“UCS Transformation Format”的縮寫

4.內碼與code page

目前Windows內核已經採用Unicode編碼,這樣在內核上可以支持全世界所有語言文字。但是由於現有大量程序和文檔都採用某種特定語言編碼,例如GBK,Windows不可能不支持現有的編碼,而全部改用Unicode

Windows使用代碼頁(code page)來適應各個國家和地區。code page可以被理解爲前面提到的內碼。GBK對應的code page是CP936GB18030 code page:CP54936。但由於GB18030有一部分4字節編碼,而Windows代碼頁只支持單字節和雙字節編碼,所以這個code page是無法真正使用的

5.UTF編碼

UTF-8就是以8位爲單元對UCS進行編碼。從UCS-2到UTF-8的編碼方式如下:

UCS-2編碼(16進制) UTF-8字節流(二進制)

0000-007F 0xxxxxxx 0080-07FF 110xxxxx 10xxxxxx 0800-FFFF 1110xxxx 10xxxxxx 10xxxxxx

https://blog.csdn.net/wanghuiqi2008/article/details/8079071

例如“漢”字Unicode編碼是6C49,6C49在0800-FFFF之間,所以要用3字節模板:1110xxxx 10xxxxxx 10xxxxxx。將6C49寫成二進制是:0110 110001 001001,用這個比特流依次代替模板中的x,得到:11100110 10110001 10001001,即E6 B1 89

UTF-16以16位爲單元對UCS進行編碼。對於小於0x10000的UCS碼,UTF-16編碼就等於UCS碼對應的16位無符號整數。對於不小於0x10000的UCS碼,定義了一個算法。不過由於實際使用的UCS2,或UCS4的BMP必然小於0x10000,所以就目前而言,可以認爲UTF-16和UCS-2基本相同。但UCS-2只是一個編碼方案,UTF-16卻要用於實際的傳輸,所以就不得不考慮字節序的問題

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