unicode gbk utf-8的差別

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

相關文章
相關標籤/搜索