GBK和UTF-8文字編碼的區別
UTF-8是一種國際化標准的文字編碼,GBK的存在是為了中國國情而創造的
GBK和UTF-8文字編碼的特點:
GBK的文字編碼是雙字節來表示的,即不論中、英文字符均使用雙字節來表示,只不過為區分中文,將其最高位都定成1。
至於UTF-8編碼則是用以解決國際上字符的一種多字節編碼,它對英文使用8位(即一個字節),中文使用24位(三個字節)來編碼。對於英文字符較多的論壇則用UTF-8節省空間。
GBK和UTF-8文字編碼的區別:
GBK包含全部中文字符;
UTF-8則包含全世界所有國家需要用到的字符。
GBK是在國家標准GB2312基礎上擴容后兼容GB2312的標准;(好像還不是國家標准)
UTF-8編碼的文字可以在各國各種支持UTF8字符集的瀏覽器上顯示。
比如,如果是UTF8編碼,則在外國人的英文IE上也能顯示中文,而無需他們下載IE的中文語言支持包。
所以,對於英文比較多的論壇 ,使用GBK則每個字符占用2個字節,而使用UTF-8英文卻只占一個字節。
注意:
UTF-8版本雖然具有良好的國際兼容性,但中文需要比GBK/BIG5版本多占用50%的數據庫存儲空間,因此並非推薦使用,僅供對國際兼容性有特殊要求的用戶使用。
總結:
GBK就是在保存你的帖子的時候,一個漢字占用兩個字節。外國人看會出現亂碼,此為我中華為自己漢字編碼而形成之解決方案。
UTF8就是在保存你的帖子的時候,一個漢字占用3個字節。但是外國人看的話不會亂碼,此為西人為了解決多字節字符而形成之解決方案。
ASCII(ISO-8859-1)是鼻祖,最簡單的方式,字節高位為0。
GB2312、GBK、GB18030,這幾個是中文編碼方式,並向下兼容。GB2312包含7000多個漢字和字符,GBK包含21000多個,GB18030更厲害,到了27000多個。他們都是用2個字節來表示一個漢字。跟ascii是怎么區分的呢?如果高字節的高位為1(也就是高字節大於127),就表示是漢字,低字節並無明顯特征。
Unicode是統一編碼,它建立了一個全世界統一的碼表。世界上的所有文字,在這張碼表中都是唯一的。
UTF-8是Unicode的一種存儲、傳輸方式。它將整個Unicode碼表分為3部分。
0000 - 007F 這部分是最初的ascii部分,按原始的存儲方式,即0xxxxxxx。
0080 - 07FF 這部分存儲為110xxxxx 10xxxxxx。
0800 - FFFF 這部分存儲為1110xxxx 10xxxxxx 10xxxxxx。
因此,一個漢字究竟被存儲為什么,就需要:先查unicode碼表,然后根據在碼表的位置進行計算。例如:“電”字,在碼表中是3575,計算成utf8就是E794B5,而在GB2312的碼表中為B5E7。
UTF-8的好處:兼容ASCII,存儲英文文件都是單字節,文件小。當然,當以存中文為主時就變成了3字節編碼了,比GB系列還大!如何標明一個文件是utf8格式呢?這個標記是可選的:EF BB BF。比如,用windows自帶的記事本創建一個utf8格式的文件,就會加上這個標記。但是,如果用ultraedit創建utf8文件,並不會加上這個標記。這個標記有個術語,叫做BOM(Byte Order Mark)。不帶BOM的utf8文件和GB2312文件怎么區分呢?我也不知道。唯一能想到的辦法就是:先用一種試,如果出現亂碼,就用另一種再試。
簡言而知,GBK編碼方式的編碼是以中國國情而創造的,在國際上的兼容性不好,這也是為什么大多數的網頁是使用UTF-8編碼而不是GBK。