編碼的名詞解釋(整理)
中英文的區別:從ASCII、GB2312、GBK到GB18030,這些編碼方法是向下相容的,即同一個字元在這些方案中總是有相同的編碼,後面的標準支援更多的字元。在這些編碼中,英文和中文可以統一地處理。區分中文編碼的方法是高位元組的最高位不為:非中文<0x80;中文>0x80,英文為單位元組,中文為雙位元組。按照程式設計師的稱呼,GB2312、GBK到GB18030都屬於雙位元組字符集 (DBCS)。GB2312的原文還是區位碼,從區位碼到內碼,需要在高位元組和低位元組上分別加上A0。在DBCS中,GB內碼的儲存格式始終是big endian,即高位在前。從ASCII、GB2312、GBK到GB18030的編碼方法是向下相容的。而Unicode只與ASCII相容(更準確地說,是與ISO-8859-1相容),與GB碼不相容。例如“漢”字的Unicode編碼是6C49,而GB碼是BABA
GB2312:(1980年)一共收錄了7445個字元,包括6763個漢字和682個其它符號。漢字區的內碼範圍高位元組從B0-F7,低位元組從A1-FE,佔用的碼位是72*94=6768。其中有5個空位是D7FA-D7FE
GBK:2000年的GB18030是取代GBK1.0的正式國家標準。該標準收錄了27484個漢字,同時還收錄了藏文、蒙文、維吾爾文等主要的少數民族文字,該編碼與UCS相容。現在的PC平臺必須支援GB18030,對嵌入式產品暫不作要求。所以手機、MP3一般只支援GB2312。GBK的編碼區間為0X8140到0XFEFE。整個碼錶分為5個區間,稱為GBK1(A1A1-A9FE)、GBK2(B0A1-F7EE)、GBK3(8140-A0FE)、GBK4(AA40-FEA0)、GBK5(A840-A9A0).其中GBK1包括符號717個,GBK2包括GB2312漢字6763個,GBK3包括GB13000.1中的漢字6080個,GBK4包括增補的漢字8160個,GBK5包括擴充漢字元號166個。
Unicode(UCS2):檔案頭十六進位制程式碼為FF、FE。為中、日、朝三國文字編碼,把單個漢字的十六進位制碼反位存貯。Unicode的學名是"Universal Multiple-Octet Coded Character Set",簡稱為UCS。UCS可以看作是"Unicode Character Set"的縮寫。從Unicode2.0開始,Unicode專案採用了與ISO 10646-1相同的字型檔和字碼。Unicode協會現在的最新版本是2005年的Unicode 4.1.0。ISO的最新標準是10646-3:2003。怎樣傳輸這些編碼,是由UTF(UCS Transformation Format)規範規定的,常見的UTF規範包括UTF-8、UTF-7、UTF-16。IETF的RFC2781和RFC3629以RFC的一貫風格,清晰、明快又不失嚴謹地描述了UTF-16和UTF-8的編碼方法。我總是記不得IETF是Internet Engineering Task Force的縮寫。但IETF負責維護的RFC是Internet上一切規範的基礎。
Unicode big endian:檔案頭十六進位制程式碼為FE、FF。把單個漢字的十六進位制碼反位存貯。
UTF-8:檔案頭十六進位制程式碼為EF、BB、BF。UTF-8就是以8位為單元對UCS進行編碼。為不定長度的編碼, 對英文,仍然和ASCII一樣用1個位元組表示,這個位元組的值小於128(\x80); 對其他語言的用一個值位於128-256之間的位元組開始,再加後面緊跟的2個位元組表示,一個字元一共是3個位元組;。從UCS-2到UTF-8的編碼方式如下:
UCS-2編碼(16進位制) UTF-8 位元組流(二進位制)
0000 - 007F 0xxxxxxx&
0080 - 07FF 110xxxxx 10xxxxxx
0800 - FFFF 1110xxxx 10xxxxxx 10xxxxxx
例如“漢”字的Unicode編碼是6C49。6C49在0800-FFFF之間,所以肯定要用3位元組模板了:1110xxxx 10xxxxxx 10xxxxxx。將6C49寫成二進位制是:0110 110001 001001, 用這個位元流依次代替模板中的x,得到:11100110 10110001 10001001,即E6 B1 89。
UTF-16:UTF-16以16位為單元對UCS進行編碼。UTF-16以16位為單元對UCS進行編碼。對於小於0x10000的UCS碼,UTF-16編碼就等於UCS碼對應的16位無符號整數。對於不小於0x10000的UCS碼,定義了一個演算法。不過由於實際使用的UCS2,或者UCS4的BMP必然小於0x10000,所以就目前而言,可以認為UTF-16和UCS-2基本相同。但UCS-2只是一個編碼方案,UTF-16卻要用於實際的傳輸,所以就不得不考慮位元組序的問題。
UTF-32:Utf-32 是輸入Unicode 字元方法, 使用一個固定值32 位為各個字元。Utf-32 最初是Ucs 4 標準的一個子集, 但JTC1/SC2/WG2 的原則和規程檔案闡明, 字元的所有未來任務將被強迫對BMP 或第一14 架補充飛機並且取消了前供應為民辦利用程式碼主張在小組60 對7F 和在飛機E0 裡對FF 。