1. 程式人生 > >淺析unicode和UTF-8、UTF-16、UTF-32的區別

淺析unicode和UTF-8、UTF-16、UTF-32的區別

1、區別編碼字符集和字符集編碼

首先要注意的是unicode是編碼字符集,而UTF-8、UTF-16、UTF-32是字符集編碼(好繞哎有沒有)。下面我來具體解釋一下:

比如漢字的”漢”,在unicode中,漢”的unicode值為0x6C49。問:把這個”漢”字儲存到計算機中(硬碟、記憶體),機器碼是多少呢?
學過《計算機組成原理》的人都知道,計算機內部儲存的形式都是0101的二進位制數字串。”漢”字儲存在計算機裡肯定也是0101的數字串。”漢”的unicode值是0x6C49,轉化為2進位制 1101100 01001001,那麼把這個”漢”字儲存到計算機中也是 1101100 01001001 嗎?答案:NO!

答案:取決於用到的字符集編碼是哪種
比如你用到的字符集編碼是UTF-8,那麼”漢”字在計算機內部儲存的值為0xE6B189,也就是111001101011000110001001,可以看到”漢”字變成了3個位元組。UTF-8用1-8個位元組來儲存unicode編碼的字元


而如果用UTF-16來儲存,那麼”漢”字仍為仍為0x6C49,也就是 1101100 01001001。UTF-16只能是選兩位元組或四位元組來儲存字元
而UTF-32就是把所有的字元都用32bit也就是4個位元組來表示。
所以這就是編碼字符集和字符集編碼的區別。

2、unicode的一段歷史
首先要注意unicode並不是用2個位元組來表示字串的。unicode1.0版本,所有的字元都是2個位元組。但是現在的unicode編碼在一百一十萬左右,遠遠超過了2的16次方,也就是2個位元組。所以,現在講unicode編碼是2個位元組是錯誤的!。至於這段歷史,大家可以自行google