{eval=Array;=+count(Array);}
GBK是微軟為簡體中文而制定的本地編碼,在工信部被案。各個國家或地區都會制定并使用各自的本地編碼,一些企業也會制定某個國家或地區的本地編碼(GBK就是微軟制定的簡體中文編碼)。一份用本地編碼編寫的文件在不指明所用的本地編碼時被打開就可能看到亂碼的現象。
為了解決本地編碼的亂象,統一編碼(UNICODE)和ISO這兩個組織都著手制定能容納各國文字而不沖突的文字編碼系統,目前這兩個組織相互承認,并且編碼兼容。
目前很多計算機系統已使用2字節(16位整數)或4字節(32位整數)的統一編碼,統一編碼只說明每個字符的編碼,但沒有說明如何將編碼存放入存儲介質上。
由于目前計算機系統有高字節在前和低字節在前兩種整數存放模式,因此采用高字節在前存放的數據在低字節在前的系統中就會出現異常,反之亦然。同時,我們知道許多編程系統在處理字符串時會將值為0的字節認為是字符串的結束,而無論是高字節在前還是低字節在前的字符串,都會在字符串中出現大量值為0的字節,這時傳統的字符串處理函數就無法使用了。
為了解決統一編碼如何存放的問題并兼容現有的字符串處理函數,就推出了UTF8編碼,這個編碼規定了統一編碼的存放方式,并且保證依然使用值為0的字節作為字符串的結束符,這樣就可以依然使用原有的字符串處理函數而不必新開發一套了。
當然UTF8也存在一個問題,這就是它是變長編碼。一個統一編碼的字符可能會編碼為一個字節、二個字節、三個字節、四個字節(版本1)或六個字節(版本2)。
回答這個問題前先了解下什么叫字符集。
計算機里面只有高電平和低電平,用數字表達就是0101,二進制。二進制可以和八進制,十進制,十六進制轉換。
那么計算機如何表述文字呢,英文,簡體中文,繁體中文,日語,等文字呢?
各國都設計了不同的對應關系,將數字和文字對應起來。這就有了下面不同的字符集。
GB2312、GBK、GB18030 - 中文
BIG5 - 中文繁體
KS X 1001、EUC-KR、ISO-2022-KR - 韓文
JIS X 0208 - 日文
但以上每種字符集都只收錄了本國的文字,需要顯示不同國家的文字,還需要設置不同的字符集,很不方便。
這個時候UNICODE就出現了,統一了字符集,將各國的文字都編碼進去了。
但完整在計算機里面表述Unicode需要4個自己,這個時候就有了各種不同的編碼規則。
比如utf8,utf16,utf32之類的。其中utf8是最經濟實惠的(空間占用最少)。
這樣既實現了處理各國文字,有實現了不亂碼,無需轉碼之類的。
window默認使用gbk,一個漢字占用2個字節的空間,gbk對中文和英語支持是可以,但別的很多語言的文字不能顯示。Linux默認使用UTF-8,一個漢字占用3個字節的空間,UTF-8又稱萬國碼,所有的語言的文字都能顯示。
互聯網上用的最多的是UTF-8,window平臺下很多軟件保存文本還是gbk格式的多。
utf8是國際標準,適合西方和亞洲文字,當然中文也沒問題。國內銷售的軟件必須符合國標,所以必須符合gb18030標準,于是就只能gbk了,Windows本來是支持utf8的,為了符合中國國標只能gbk。
gbk和utf8可以互相轉換,但還是無法100%保證不亂碼。
gb18030,gbk,unicode是字符編碼,是各個組織或者國家制定的針對字符(或者叫符號)的一種編碼方式。utf8是傳輸編碼,是為了解決unicode在英語世界存儲或者傳輸過程中,帶寬浪費的問題,兩者不是同一類標準,不可以互相比較
0
回答0
回答0
回答0
回答0
回答0
回答0
回答0
回答0
回答0
回答