1. 程式人生 > 其它 >GBK和UTF-8文字編碼的區別

GBK和UTF-8文字編碼的區別

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這部分儲存為110xxxxx10xxxxxx。   0800-FFFF這部分儲存為1110xxxx10xxxxxx10xxxxxx。   因此,一個漢字究竟被儲存為什麼,就需要:先查unicode碼錶,然後根據在碼錶的位置進行計算。例如:“電”字,在碼錶中是3575,計算成utf8就是E794B5,而在GB2312的碼錶中為B5E7。   UTF-8的好處:相容ASCII,儲存英文檔案都是單位元組,檔案小。當然,當以存中文為主時就變成了3位元組編碼了,比GB系列還大!如何標明一個檔案是utf8格式呢?這個標記是可選的:EFBBBF。比如,用windows自帶的記事本建立一個utf8格式的檔案,就會加上這個標記。但是,如果用ultraedit建立utf8檔案,並不會加上這個標記。這個標記有個術語,叫做BOM(ByteOrderMark)。不帶BOM的utf8檔案和GB2312檔案怎麼區分呢?我也不知道。唯一能想到的辦法就是:先用一種試,如果出現亂碼,就用另一種再試。   簡言而知,GBK編碼方式的編碼是以中國國情而創造的,在國際上的相容性不好,這也是為什麼大多數的網頁是使用UTF-8編碼而不是GBK。