字符編碼GB23十二、GBK、UTF-8的區別

本文來自:javaeye網站

UTF8是國際編碼,它的通用性比較好,外國人也能夠瀏覽論壇java

GBK是國家編碼,通用性比UTF8差,不過UTF8佔用的數據庫比GBK大~數據庫

 

提示:若是您的網站客戶羣體主要是面向國內用戶的,建議使用GBK版本,由於它能夠節省空間,及相對utf-8版原本講穩定一些。
對於DZ論壇來講,不少插件都只支持GBK的,若是須要裝較多插件的論壇仍是用GBK比較好,而對裝較少插件且有特殊用戶羣的論壇用UTF8比較好。瀏覽器

 

GBK版本與UTF-8版本功能是同樣的.只不過編碼方式不一樣。服務器

 

GBK的文字編碼是雙字節來表示的,即不論中、英文字符均使用雙字節來表示,只不過爲區分中文,將其最高位都定成1。網站

至於UTF-8編碼則是用以解決國際上字符的一種多字節編碼,它對英文使用8位(即一個字節),中文使用24位(三個字節)來編碼。對於英文字符較多的網站則用UTF-8節省空間。編碼

GBK包含所有中文字符;UTF-8則包含全世界全部國家須要用到的字符。spa

GBK是在國家標準GB2312基礎上擴容後兼容GB2312的標準,UTF-8編碼的文字能夠在各國各類支持UTF8字符集的瀏覽器上顯示。
好比,若是是UTF8編碼,則在外國人的英文IE上也能顯示中文,而無需他們下載IE的中文語言支持包。 因此,對於英文比較多的論壇 ,使用GBK則每一個字符佔用2個字節,而使用UTF-8英文卻只佔一個字節。插件

 

簡單的說 UTF-8包含了不少世界範圍內的語言編碼(至關於一個大字庫) 好比日文 韓文 均可以用。GBKGB2312只是中文的,至關於包含的漢字個數的多少。爲了方便仍是用UTF-8比較好。code

 

區別網上有不少,本身查一下吧,編碼格式不同,支持的字符不一樣,簡單說一下原理
字符串都是unicode碼,包括英文,漢字...其餘字符
unicode能夠被轉化爲字節(byte),如何轉換呢,就經過gbkutf-8gb2312等編碼方式。當把字節轉換回字符串的時候,也要用相應的編碼方式進行轉換。
好比客戶端把unicode碼經過utf-8轉換爲二進制流(也就是字節byte),而到了服務器端用gbk編碼來把這個二進制流轉換爲字符串(unicode)的時候,就會出現亂碼。必須也要用相應的編碼方式進行轉換。

        gbk(encode)                  gbk(decode)
unicode---------------->byte[]------------------------------>unicode
String                二進制流                              Stringorm

 

通用轉換格式UTF(Universal Transformation Format)
UTF-8是UNICODE的一種變長字符編碼

GBK: 漢字國標擴展碼,基本上採用了原來GB2312-80全部的漢字及碼位,
並涵蓋了原Unicode中全部的漢字20902
GBK編碼是中國大陸制訂的、等同於UCS的新的中文編碼擴展國家標準

GB 2312或GB 2312-80是一個簡體中文字符集的中國國家標準
GB 2312標準共收錄6763個漢字

 

區別很簡單,不一樣的字符集。


什麼叫字符集,其實就是一張對照表。"啊"字對應UNICODE編碼就是"554A",對應的GBK編碼是"B0A1".
什麼是對照表呢,簡單舉個例子,就是班級的點名冊,"張三"對應10號。計算機不能存儲"張三",就存儲個"10",取出一個10,按對照表一查,返回一個"張三"。
可是在全學校的點名冊裏,"張三"對應15號。不一樣的點名冊就是不一樣的字符集。

現 在你把"10"存進去了,取出來後,按照班級點名冊取出了"張三",很正確,若是用了全學校的點名冊,返回給你個外國人,假設你不認識英文,你就以爲亂碼 了,其實沒亂,你能夠把它返回成10,再用班級點名冊去對照,"張三"不就出來了。注意:若是全學校的點名冊裏沒有10對應的人,按照約定就返回給 你"????",這個時候才真的亂碼了,返回不了了。

不一樣的點名冊,就是不一樣的字符集。GB2312是一個點名冊,後來班裏又插班進來倆學生,GB2312加倆學生,老師說,點名冊不同了,換個名吧,叫GBK好了。

中國有個學生叫"張三",在中國是"10"號,後來出國了,聯合國給他個號"20"號,一個GBK,一個UTF8,但都是一我的,對應不一樣的號而已。

ps:UTF-8是UNICODE的變種,從UNICODE編碼能夠計算出一個字對應的UTF-8編碼。

相關文章
相關標籤/搜索