1. 程式人生 > >[十]基礎資料型別之Unicode編碼簡介

[十]基礎資料型別之Unicode編碼簡介

如果U≥0x010000    也就是0x010000 ~ 0x10FFFF
我們先計算下 U'=U-0x010000 
可以得出來 U'  範圍是 0x000000 ~ 0x0FFFFF
顯然,  U'的最大值為0xFFFFF   也就是最多20個1    也就是可以被寫成20個二進位制位
既然是20個二進位制位,那麼我們是不是可以把它拆分成兩組呢?
每組10個二進位制位    00  0000  0000
它能表示的範圍是2的10次方=1024個 

BMP是2個位元組,16位, 很顯然,如果把U' 拆分成兩組,每組10個二進位制位的話
每一個都能夠儲存到2個位元組內

所以Unicode標準規定:基本多語言平面內,U+D800..U+DFFF的值不對應於任何字元,為代理區 ,其中又分為高代理區和低代理區

U+D800 加上10個二進位制位的數值的最大值,可以得到高代理區的範圍
U+D800 --->1101 10 00  0000  0000  + 0000 00 11  1111 1111 = 1101 1011 1111 1111 = 0xDBFF


下一個就是0xDBFF +1 = 0xDC00,所以低代理區從0xDC00  開始
0xDC00 加上10個二進位制位的數值的最大值,可以得到低代理區的範圍
0xDC00----> 1101  1100  0000  0000 + 0000 00 11  1111 1111 = 1101111111111111 = 0xDFFF