UTF-16:可变长编码,使用2个或4个字节来表示一个字符。基本多文种平面(BMP)中的字符使用2个字节,而辅助平面的字符则需4个字节。
Unicode编码与UTF-16的编码的对应关系:
Unicode小于0x10000
UTF-16使用2个字节,直接使用Unicode码
Unicode大于0x10000
UTF-16使用4个字节,这4个字节分成前后两部分,每个部分各2个字节。在这两个字节中,前六位的二进制数分别固定为110110和110111,而后十位的二进制数则代表Unicode码减去0x10000后的结果,其中yy yyyyyyyy 和xx xxxxxxxx分别表示这两部分的数值。
例如,“川”字的Unicode码为0x17B8C,在UTF-16编码格式中表示为110110yy yyyyyyyy 110111xx xxxxxxxx。由于0x17B8C大于0x10000,因此需要先减去0x10000,得到0x7B8C。将0x7B8C转换成二进制,得到111 1011 1000 1100。然后将其拆分成y 10位(不足10位补0)00 0001 1110和x 10位11 1000 1100。按照从右至左的顺序,填充到y和x的位置,结果为11011000 00011110 11011111 10001100。