Unicode (中文稱:萬國碼)給每個字元提供了一個唯一的數(shù)位,不論是什么平臺贴浙、不論是什么程式、不論是什么語言姑原。
簡而之悬而,Unicode是字符集呜舒,將所有的文字锭汛,符號等等編碼。
UTF-8 是編碼的方式袭蝗,優(yōu)化 Unicode 的編碼唤殴。
例如: “Hi! 你好”
你看到的 Unicode 字符編碼是這樣的:
H 0048
I 0069
你 4F60
好 597D
每一個字符對應(yīng)了一個16進(jìn)制的數(shù)字。
由于電腦只懂2進(jìn)制編碼到腥,所以按照 Unicode 的方式(UCS-2)朵逝,會按以下儲存:
H 00000000 01001000
i 00000000 01101001
! 00000000 00100001
你 01001111 01100000
好 01011001 01111101
這個字符串共估了8個字節(jié),對比以上中英文2進(jìn)制編碼乡范,英文前9個都是0配名,占用了硬碟容量,十分浪費晋辆!
怎樣優(yōu)化渠脉?
UTF-8 的誕生就是為了優(yōu)化這個問題。
- 單字節(jié)的字符瓶佳,字節(jié)的第一位設(shè)為0芋膘,對于英語文本,UTF-8碼只占用一個字節(jié)霸饲,和ASCII碼完全相同为朋;
- n個字節(jié)的字符 n>1,第一個字節(jié)的前n位設(shè)為1厚脉,第n+1位設(shè)為0习寸,后面字節(jié)的前兩位都設(shè)為10,這n個字節(jié)的其余空位填充該字符unicode碼傻工,高位用0補(bǔ)足融涣。如以下所示:
UCS-2: 00000000 00000000 00000000 011111112
UTF-8: 0XXXXXXX
-----
UCS-2: 00000000 00000000 00000111 111111112
UTF-8: 110XXXXX 10XXXXXX
------
UCS-2: 00000000 00000000 11111111 111111112
UTF-8: 1110XXXX 10XXXXXX 10XXXXXX
------
UCS-2: 00000000 00011111 11111111 111111112
UTF-8: 11110XXX 10XXXXXX 10XXXXXX 10XXXXXX
所以 “Hi! 你好” 就變成了
H 01001000
I 01101001
! 00100001
你 11100100 10111101 10100000
好 11100101 10100101 10111101
對比 UCS-2 及 UTF-8童番,英文的字節(jié)變短了,雖然每個中文字符用多了一個字節(jié)威鹿。但整體來說 UTF-8 只用了9個字節(jié)剃斧,比 UCS-2 的10個字節(jié)小了一點。
整體來說忽你,UTF-8 更節(jié)省了字節(jié)的占用容量幼东,至小在英文字符上的確較為節(jié)省。