GB2312(1980年)定義,包含6763個漢字,682個字符html
GBK1.0 定義了21003個漢字,21886個字符windows
ASCII->GB2312->GBK 編碼方式向後兼容,即同一個字符在這些編碼方案中老是有相同的編碼,只是越到後面支持的字符更多編碼
區分中文編碼的方法是高字節的最高位不爲0(@todo),兩個字節的最高位都是1spa
GB2312,GBK都屬於雙字節字符集code
GB18030(2000年)取代GBK1.0成爲正式的國家標準,定義了27484個漢字。編碼採用單字節,雙字節,四字節(四字節碼位,收入了CJK擴展的6582個漢字)htm
CJK(中日韓)擴展 unicode (0x3400—0x4db5)blog
unicode 爲節省碼位,將中日韓三國語言中的文字統一編碼ip
GB2312的原始編碼是區位碼,從區位碼到內碼,須要在高字節和低字節上分別加上 「A0」。utf-8
GB2312 用區位碼錶示,用兩個數來編碼漢字和中文符號(第一個爲區,第二個爲位)unicode
內碼是指OS內部的編碼(早起和語言相關,如今都使用unicode了,已經無關了)
任何字符編碼,編碼單元的順序都是有編碼方案制定的,與endian(字節序)無關。
例如:
GBK 編碼單元是字節,用兩個字節表示一個漢字,這兩個字節的順序是固定的,不受CPU字節序(endian)的影響。
utf-16 編碼單元是word(字),word之間的順序是由編碼方案制定的,word內部的順序收到endian(字節序)的影響。
DBCS字符流解析,遇到最高位爲1的字節,就將下兩個字節做爲雙字節編碼。
unicode 只與 ASCII 兼容, 與GB不兼容
eg: 「漢」 的編碼
unicode 6c49
GB BABA
unicode 是一種字符編碼方法(兼容世界上全部語言的編碼方案)
全稱:universal multiple-octet coded character set
簡稱:USC: unicode character set
unicode 2.0 (1991年)採用 iso-10646-1相同的字庫和編碼
unicode 最新版本 unicode 4.0(2005年)
USC 規定了如何編碼,並未規定如何傳輸和保存編碼
內碼和code page
windows內核已經支持unicode
windows 曾經使用 code page 適應國際化(支持單字節和雙字節編碼),但GB180031有一部分是四字解編碼的,故code page 沒法真正使用。
USC 兩種格式 USC-2(雙字節), USC-4(四字節,實際上只用31位,最高位必須爲0)
utf-8 以8位爲單元對USC進編碼(以字節爲單元,沒有字節序(endian)的問題)
utf-16 以16爲單位對USC進行編碼,須要知道編碼單元的字節序
unicode中標記字節序的方法BOM (bill of mark)
FFFE zero width no-break space, 在USC中不存在(不應出如今實際的傳輸中)
若是收到 FEFF 代表是 big-endian,若是收到 FFFE 代表是 little-endian
utf-8 不須要 BOM 代表字節序
但能夠用BOM來代表編碼方式
字符 zero width no-break space 的utf-8是 EF BB BF 故接收者收到 EF BB BF開頭的字節流代表是utf-8編碼
windows 用BOM標記文本文件的編碼方式
字節長度
utf-8 中文(3字節) 英文(1字節)
gbk 每一個字符(2字節),中文高位爲1
故英文多的站點使用utf-8編碼能夠節省空間。
@todo
GBK 不用雙字節表示, 00-07 是一位於ASCII一致,96個文字,32個控制符號
unicode 將全部文字都用2個字節表示(編碼),編碼空間爲2^8*2^8=65536
釋義
endian 字節序
big-endian 大字節序
little-endian 小字節序
參考:
unicode, gbk, utf-8區別:http://www.cnblogs.com/cy163/archive/2007/05/31/766886.html