Unicode 和 UTF-8 有什么区别?
作者:uuspider
鏈接:https://www.zhihu.com/question/23374078/answer/65352538
來(lái)源:知乎
著作權(quán)歸作者所有。商業(yè)轉(zhuǎn)載請(qǐng)聯(lián)系作者獲得授權(quán),非商業(yè)轉(zhuǎn)載請(qǐng)注明出處。
?
舉一個(gè)例子:It's 知乎日?qǐng)?bào)
你看到的unicode字符集是這樣的編碼表:
I 0049 t 0074 ' 0027 s 00730020 知 77e5 乎 4e4e 日 65e5 報(bào) 62a5每一個(gè)字符對(duì)應(yīng)一個(gè)十六進(jìn)制數(shù)字。
計(jì)算機(jī)只懂二進(jìn)制,因此,嚴(yán)格按照unicode的方式(UCS-2),應(yīng)該這樣存儲(chǔ):
I 00000000 01001001 t 00000000 01110100 ' 00000000 00100111 s 00000000 0111001100000000 00100000 知 01110111 11100101 乎 01001110 01001110 日 01100101 11100101 報(bào) 01100010 10100101這個(gè)字符串總共占用了18個(gè)字節(jié),但是對(duì)比中英文的二進(jìn)制碼,可以發(fā)現(xiàn),英文前9位都是0!浪費(fèi)啊,浪費(fèi)硬盤,浪費(fèi)流量。
怎么辦?
UTF。
UTF-8是這樣做的:
1. 單字節(jié)的字符,字節(jié)的第一位設(shè)為0,對(duì)于英語(yǔ)文本,UTF-8碼只占用一個(gè)字節(jié),和ASCII碼完全相同;
2. n個(gè)字節(jié)的字符(n>1),第一個(gè)字節(jié)的前n位設(shè)為1,第n+1位設(shè)為0,后面字節(jié)的前兩位都設(shè)為10,這n個(gè)字節(jié)的其余空位填充該字符unicode碼,高位用0補(bǔ)足。
這樣就形成了如下的UTF-8標(biāo)記位:
0xxxxxxx
110xxxxx 10xxxxxx
1110xxxx 10xxxxxx 10xxxxxx
11110xxx 10xxxxxx 10xxxxxx 10xxxxxx
111110xx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx
1111110x 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx
... ...
于是,”It's 知乎日?qǐng)?bào)“就變成了:
I 01001001 t 01110100 ' 00100111 s 0111001100100000 知 11100111 10011111 10100101 乎 11100100 10111001 10001110 日 11100110 10010111 10100101 報(bào) 11100110 10001010 10100101和上邊的方案對(duì)比一下,英文短了,每個(gè)中文字符卻多用了一個(gè)字節(jié)。但是整個(gè)字符串只用了17個(gè)字節(jié),比上邊的18個(gè)短了一點(diǎn)點(diǎn)。
下邊是課后作業(yè):
請(qǐng)將”It's 知乎日?qǐng)?bào)“的GB2312和GBK碼(自行g(shù)oogle)轉(zhuǎn)成二進(jìn)制。不考慮歷史因素,從技術(shù)角度解釋為什么在unicode和UTF-8大行其道的同時(shí),GB2312和GBK仍在廣泛使用。
劇透:一切都是為了節(jié)省你的硬盤和流量。
總結(jié)
以上是生活随笔為你收集整理的Unicode 和 UTF-8 有什么区别?的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: java 识别fn键_Fn快捷键全解
- 下一篇: Arm中国“战火”升级:第三封声明再次否