Unicode 和 UTF-8 有什么区别?
作者:uuspider
鏈接:https://www.zhihu.com/question/23374078/answer/65352538
來源:知乎
著作權歸作者所有。商業轉載請聯系作者獲得授權,非商業轉載請注明出處。
?
舉一個例子:It's 知乎日報
你看到的unicode字符集是這樣的編碼表:
I 0049 t 0074 ' 0027 s 00730020 知 77e5 乎 4e4e 日 65e5 報 62a5每一個字符對應一個十六進制數字。
計算機只懂二進制,因此,嚴格按照unicode的方式(UCS-2),應該這樣存儲:
I 00000000 01001001 t 00000000 01110100 ' 00000000 00100111 s 00000000 0111001100000000 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 0111001100100000 知 11100111 10011111 10100101 乎 11100100 10111001 10001110 日 11100110 10010111 10100101 報 11100110 10001010 10100101和上邊的方案對比一下,英文短了,每個中文字符卻多用了一個字節。但是整個字符串只用了17個字節,比上邊的18個短了一點點。
下邊是課后作業:
請將”It's 知乎日報“的GB2312和GBK碼(自行google)轉成二進制。不考慮歷史因素,從技術角度解釋為什么在unicode和UTF-8大行其道的同時,GB2312和GBK仍在廣泛使用。
劇透:一切都是為了節省你的硬盤和流量。
總結
以上是生活随笔為你收集整理的Unicode 和 UTF-8 有什么区别?的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: java 识别fn键_Fn快捷键全解
- 下一篇: Arm中国“战火”升级:第三封声明再次否