Unicode 與 UTF-8 的關係?

Roy Kwok
3 min readJan 16, 2019

Unicode (中文稱:萬國碼)給每個字元提供了一個唯一的數位,不論是什麼平臺、不論是什麼程式、不論是什麼語言。

簡而之,Unicode是字符集,將所有的文字,符號等等編碼。

UTF-8 是編碼的方式,優化 Unicode 的編碼。

例如: “Hi! 你好”

你看到的 Unicode 字符編碼是這樣的:

H 0048i 0069你 4F60好 597D

每一個字符對應了一個16進制的數字。

由於電腦只懂2進制編碼,所以按照 Unicode 的方式(UCS-2),會按以下儲存:

H 00000000 01001000i 00000000 01101001! 00000000 00100001你 01001111 01100000好 01011001 01111101

這個字符串共估了8個字節,對比以上中英文2進制編碼,英文前9個都是0,佔用了硬碟容量,十分浪費!

怎樣優化?

UTF-8 的誕生就是為了優化這個問題。

  1. 單字節的字符,字節的第一位設為0,對於英語文本,UTF-8碼只佔用一個字節,和ASCII碼完全相同;
  2. n個字節的字符 n>1,第一個字節的前n位設為1,第n+1位設為0,後面字節的前兩位都設為10,這n個字節的其餘空位填充該字符unicode碼,高位用0補足。如以下所示:
UCS-2: 00000000 00000000 00000000 011111112UTF-8: 0XXXXXXX-----UCS-2: 00000000 00000000 00000111 111111112UTF-8: 110XXXXX 10XXXXXX------UCS-2: 00000000 00000000 11111111 111111112UTF-8: 1110XXXX 10XXXXXX 10XXXXXX------UCS-2: 00000000 00011111 11111111 111111112UTF-8: 11110XXX 10XXXXXX 10XXXXXX 10XXXXXX

所以 “Hi! 你好” 就變成了

H 01001000i 01101001! 00100001你 11100100 10111101 10100000好 11100101 10100101 10111101

對比 UCS-2 及 UTF-8,英文的字節變短了,雖然每個中文字符用多了一個字節。但整體來說 UTF-8 只用了9個字節,比 UCS-2 的10個字節小了一點。

整體來說,UTF-8 更節省了字節的佔用容量,至小在英文字符上的確較為節省。

本文是小弟學習前端寫有關於簡述:Unicode 與 UTF-8 的關係?請大家多多指教。如有任何意見及交流,可在下方留言,謝謝!

--

--