[十]基礎資料型別之Unicode編碼簡介
阿新 • • 發佈:2018-12-27
如果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
我們先計算下 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