UTF-16编码方式
采用双字节码元进行编码。所以一个字符编号会被映射为2、4个字节。
关键点双字节编码,就会产生字节序的问题。16位一组的编码,存储到16位的寄存器中,方向需要确定。
关键点16位编码方式在通信方面浪费宽带,但是在计算机内部通信、数据处理方面有很大的优势,毕竟计算机寄存器就是16位的。
代理区
UTF-16编码方式对于BMP平面中的字符和码点值一一对应,但是对于增补平面需要使用32位的编码规则。如果参考UTF-8编码采用标识位来区分到底是16位还是32位编码,这会导致基本平面编码各种问题。
在代码空间划分0xD800~0xDFFF码点值,用作增补平面编码。
增补平面编码
码点编号范围为0x10000~0x10FFFF(十进制为65536~1114111,码点总数为1048576个)。用两个代理码元表示,第一个码元的取值范围为0xD800~0xDBFF(二进制为1101 1000 0000 0000 ~ 1101 1011 1111 1111,十进制为55296 ~ 56319),第二个码元的取值范围为0xDC00~0xDFFF(二进制为1101 1100 0000 0000 ~ 1101 1111 1111 1111,十进制为56320 ~ 57343)。
因此,增补平面的第一个码点的编号0x10000其UTF-16编码就是0xD800 0xDC00(即0x10000经UTF-16编码后的码元序列为0xD800 0xDC00),其余类推。