ASCII編碼、GBK編碼,Unicode編碼和UTF-8。


ASCII編碼與GBK編碼

摘自百度

ASCII ((American Standard Code for Information Interchange): 美國信息交換標准代碼)是基於拉丁字母的一套電腦編碼系統,主要用於顯示現代英語和其他西歐語言。
GBK編碼,是對GB2312編碼的擴展,因此完全兼容GB2312-80標准。GBK編碼依然采用雙字節編碼方案,其編碼范圍:8140-FEFE,剔除xx7F碼位,共23940個碼位。共收錄漢字和圖形符號21886個,其中漢字(包括部首和構件)21003個,圖形符號883個。GBK編碼支持國際標准ISO/IEC10646-1和國家標准GB13000-1中的全部中日韓漢字,並包含了BIG5編碼中的所有漢字。GBK編碼方案於1995年12月15日正式發布,這一版的GBK規范為1.0版。

一般情況下,我們見到的英文和數字是單字節的,以ASCII編碼,也就是說現代的GBK編碼是兼容ASCII編碼的。比如一個數字2,對應的二進制是0x32,而不是 0xA3 0xB2。那么問題來了,0xA3 0xB2 又對應到什么呢?還是2(笑)。注意看了,這里的2跟2是不是有點不太一樣?!確實是不一樣的。這里的雙字節2是全角的二,ASCII的2是半角的二,一般輸入法里的切換全角半角就是這里不同。


一個中文字符占用2字節,使用GBK編碼的半角英文,數字和ASCII是一樣的。

GBK編碼和Unicode編碼

GBK是中國標准,只在中國使用,並沒有表示大多數其它國家的編碼;而各國又陸續推出各自的編碼標准,互不兼容,非常不利於全球化發展。於是后來國際組織發行了一個全球統一編碼表,把全球各國文字都統一在一個編碼標准里,名為Unicode。

Unicode編碼和UTF8編碼

Unicode 是「字符集」 字符集:為每一個「字符」分配一個唯一的 ID(學名為碼位 / 碼點 / Code Point)
UTF-8 是「編碼規則」 將「碼位」轉換為字節序列的規則(編碼/解碼 可以理解為 加密/解密 的過程)
廣義的Unicode是一個標准,包含字符集和一系列的編碼規則,即Unicode字符集和UTF-8,UTF-16,UTF-32......

utf8是對unicode字符集進行編碼的一種編碼方式。
一下摘自知乎uuspider的回答,

舉一個例子:It's 知乎日報

你看到的unicode字符集是這樣的編碼表:

I 0049
t 0074
' 0027
s 0073
知 77e5
乎 4e4e
日 65e5
報 62a5

每一個字符對應一個十六進制數字。

計算機只懂二進制,因此,嚴格按照unicode的方式(UCS-2),應該這樣存儲:

I 00000000 01001001
t 00000000 01110100
' 00000000 00100111
s 00000000 01110011
  00000000 00100000
知 01110111 11100101
乎 01001110 01001110
日 01100101 11100101
報 01100010 10100101

這個字符串總共占用了18個字節,但是對比中英文的二進制碼,可以發現,英文前9位都是0!浪費啊,浪費硬盤,浪費流量。怎么辦?

UTF。

UTF-8是這樣做的:
1.單字節的字符,字節的第一位設為0,對於英語文本,UTF-8碼只占用一個字節,和ASCII碼完全相同;
2.n個字節的字符(n>1),第一個字節的前n位設為1,第n+1位設為0,后面字節的前兩位都設為10,這n個字節的其余空位填充該字符unicode碼,高位用0補足。
這樣就形成了如下的UTF-8標記位:
0xxxxxxx
110xxxxx 10xxxxxx
1110xxxx 10xxxxxx 10xxxxxx
11110xxx 10xxxxxx 10xxxxxx 10xxxxxx
111110xx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx
1111110x 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx...
...
於是,”It's 知乎日報“就變成了:

I 01001001
t 01110100
' 00100111
s 01110011
知 11100111 10011111 10100101
乎 11100100 10111001 10001110
日 11100110 10010111 10100101
報 11100110 10001010 10100101

和上邊的方案對比一下,英文短了,每個中文字符卻多用了一個字節。但是整個字符串只用了17個字節,比上邊的18個短了一點點。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM