unicode 采用双字节编码,总共能够表示65536个字符,为了表达更多的字符,将D800~DFFF拿出,通过代理的方式用4字节来表达更多的字符。D800-DBFF表示高surrogate,共1024个;DC00-DFFF表示低surrogate,共1024个。这样可以表示U+10000-U+10FFFF共1024*1024个字符,同时与2字节表示的U+0000-U+FFFF连续起来。通过D800-DBFF就可以将2字节的unicode字符和4字节的unicode字符分开。
比如U+1D11E,转换成双字的unicode码如下所示:
1D11E-10000=D11E
0000 1101 0001 0001 1110
低10bit为11E
高10bit为034
故high surrogate=D800+034=D834
low surrogate=DC00+11E=DD1E