Unicode與UTF-8

Unicode

unicode是固定長度的字符集,最初由兩個字節共16位表示。16位最多隻能表示65536個字符。當需要表示各種語言的所有字符時,16位是不夠用的。所以unicode4.0新增了一組附加字符集,附加字符集採用兩個16位(注意,不是32位)來表示,最多可定義1048576個附加字符。
注意,unicode只是一組理論上的字符集。如果要在內存或者文件中表示字符,需要使用一定的編碼方式來表示unicode。 utf-8就是unicode的一種實現編碼規範。

utf-8

unicode算上附加字符集,需要使用兩個字節以上的二進制來表示,姑且認爲需要使用3個字節。而英文采用ASCII碼,只需要使用一個字節。如果將一個ASCII碼的文件用unicode來表示,文件大小將增加3倍,這是無法接受的。但是,一定要使用unicode,因爲unicode定義了世界各個語言的字符,全世界通用,這也是unicode的初衷。於是一個合適的編碼實現就非常重要。utf-8應運而生。
utf-8是變字節編碼,根據unicode值,其實現可能爲1、2、3、4……個字節。utf-8的每個字節的第一位都是1. 假設utf-8需要使用n個字節表示,第一個字節的前n位爲1,n+1位爲0,其他字節的前兩位爲10.其他位爲unicode的映射位。
        

unicode 與 utf-8的對應關係

unicode                                    utf-8   
0x00000000 - 0x0000007F     1xxxxxxx
0x00000080 - 0x000007FF     110xxxxx 10xxxxxx
0x00000800 - 0x0000FFFF     1110xxxx 10xxxxxx 10xxxxxx
0x00010000 - 0x001FFFFF 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx
0x00200000 - 0x03FFFFFF    111110xx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxxx
0x04000000 - 0x7FFFFFFF    1111110x 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxxx 10xxxxxx

utf-8中的所有x就是unicode的值。
總結utf-8字節數與unicode有效位數的關係:
 1字節 —— 1-7
 2字節 —— 8-11
 3字節 ——9-16
 4字節 ——17-21
 5字節 ——22-26
 6字節 ——27-31

所以,根據unicode的有效位數就能知道utf-8的字節數。
例如:漢字‘劉’的unicode值位:01010010 0001 1000
有效位數爲15位,因此對應的utf-8爲3個字節
utf-8爲:11100101 10001000 10011000 
即E58898.
發佈了24 篇原創文章 · 獲贊 27 · 訪問量 12萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章