這是一個異常經典的問題,有無數的新手站長每天都在百度這個問題,而我,作為一個“偽老手”站長,在明白這個這個問題的基礎上,有必要詳細的解答一下。
首先,我們要明白,GB2312、GBK和UTF-8都是一種字符編碼,除此之外,還有好多字符編碼。只是對于我們中國人的網站來說,用這三種編碼 比較多。簡單的說一下,為什么要用編碼,在計算機內,儲存文本信息用ASC II碼,每一個字符對應著唯一的ASCII碼。最初計算機是由美國發明的,他們也用的是鍵盤和上面的字母,所以他們的字符ASCII好解決。但是我們中國 的就不同了,每個漢字要對應唯一的ASCII碼。這樣,就出來了國家制定的字符編碼標準:GB2312、GBK等。其他國家,其他語言也有他們對應的編碼 標準。
GB 就是國標的意思,GB2312和GBK主要用于漢字的編碼,而UTF-8是全世界通用的。意思就是說,如果你的網頁主要面對使用漢語的中國人的話,使用GB2312和GBK非常好,文字儲存體積要小,有一些優點。如果你的網頁要面向世界的話,你再用GB2312和GBK作為網頁編碼的話,有些電腦上的瀏 覽器沒有這種編碼,你的網頁漢字內容就會變成無法識別的亂碼。
它們通常用在網頁的meta標簽內,例如:<meta http-equiv=”Content-Type” content=”text/html; charset=gb2312″ />,表示這個頁面使用的是GB2312編碼。這個信息是給瀏覽器看的,瀏覽器會優先考慮使用從網頁頭部提取出來的編碼信息對網頁進行解碼。當然, 我們也可以強制瀏覽器使用某種編碼解釋網頁,這樣我們就看到了傳說中的亂碼。請看下圖IE瀏覽器:
百度首頁使用的是GB2312編碼,我們可以看到現在是正常的。我們右擊頁面,選擇“編碼”->“其他”->“Unicode(UTF-8)”,意思就是強制瀏覽器使用UTF-8的編碼方式解析頁面,我們可以看到奇跡發生了:
百度頁面上所有的漢字都變成了亂碼。如果你的網頁使用了GB2312編碼,卻被一臺沒有GB2312編碼的電腦訪問了,里面所有的漢字都成了亂碼。如果你使用UTF-8編碼,在沒有漢字的電腦里,仍然可以正常顯示,因為UTF-8是通用的編碼,所有電腦都有。
所以,在編寫網頁時,盡量使用UTF-8編碼。
UTF-8:Unicode Transformation Format-8bit,允許含BOM,但通常不含BOM。是用以解決國際上字符的一種多字節編碼,它對英文使用8位(即一個字節),中文使用24為(三個字節)來編碼。UTF-8包含全世界所有國家需要用到的字符,是國際編碼,通用性強。UTF-8編碼的文字可以在各國支持UTF8字符集的瀏覽器上顯示。如,如果是UTF8編碼,則在外國人的英文IE上也能顯示中文,他們無需下載IE的中文語言支持包。
GBK是國家標準GB2312基礎上擴容后兼容GB2312的標準。GBK的文字編碼是用雙字節來表示的,即不論中、英文字符均使用雙字節來表示,為了區分中文,將其最高位都設定成1。GBK包含全部中文字符,是國家編碼,通用性比UTF8差,不過UTF8占用的數據庫比GBD大。
GBK、GB2312等與UTF8之間都必須通過Unicode編碼才能相互轉換:
GBK、GB2312--Unicode--UTF8
UTF8--Unicode--GBK、GB2312
對于一個網站、論壇來說,如果英文字符較多,則建議使用UTF-8節省空間。不過現在很多論壇的插件一般只支持GBK。
GB2312是GBK的子集,GBK是GB18030的子集
GBK是包括中日韓字符的大字符集合
如果是中文的網站 推薦GB2312 GBK有時還是有點問題
為了避免所有亂碼問題,應該采用UTF-8,將來要支持國際化也非常方便
UTF-8可以看作是大字符集,它包含了大部分文字的編碼。
使用UTF-8的一個好處是其他地區的用戶(如香港臺灣)無需安裝簡體中文支持就能正常觀看你的文字而不會出現亂碼。
gb2312是簡體中文的碼
gbk支持簡體中文及繁體中文
big5支持繁體中文
utf-8支持幾乎所有字符
中國大陸最常用的就是GBK18030編碼,除此之外還有GBK,GB2312,這幾個編碼的關系是這樣的。
最早制定的漢字編碼是GB2312,包括6763個漢字和682個其它符號
95年重新修訂了編碼,命名GBK1.0,共收錄了21886個符號。
之后又推出了GBK18030編碼,共收錄了27484個漢字,同時還收錄了藏文、蒙文、維吾爾文等主要的少數民族文字,現在WINDOWS平臺必需要支持GBK18030編碼。
按照GBK18030、GBK、GB2312的順序,3種編碼是向下兼容,同一個漢字在三個編碼方案中是相同的編碼。
GB2312編碼大約包含6000多漢字(不包括特殊字符),編碼范圍為第一位b0-f7,第二位編碼范圍為a1-fe(第一位為cf時,第二位為a1-d3),計算一下漢字個數為6762個漢字。當然還有其他的字符。包括控制鍵和其他字符大約7573個字符編碼
gbk編碼是對G B2312編碼的擴充,容納的漢字更多,但僅僅是擴充,沒有質的變化。保留了所有G B2312編碼,在此基礎上進行編碼范圍的擴充.容納(包含特殊字符)共22014個字符編碼.
gb18030編碼是在gbk編碼基礎上的擴充,因為漢字更多,僅僅使用兩位編碼已經不能
容納要求的漢字,所以采用了2/4位混和的辦法,可以支持更多的漢字編碼。并且保留了原有的gbk 2字節編碼兼容G B2312和gbk編碼的文件。大概容納55657個編碼(包含特殊字符)
unicode編碼(也就是UTF編碼):俗稱萬國碼,致力于使用統一的編碼準則表達各國的文字。
為表達更多的文字,utf-8采用2/3混編的方式。目前容納的漢字范圍小于gbk編碼。并且以
3字節的方式處理中文,帶來了兼容性的問題,原有的gbk,G B2312,gb18030編碼文件都不能正常的處理,還有很長的路要走。
新聞熱點
疑難解答