是因为UTF-16设计的这个代理对编码机制,将码元的有效位数从原来的16位,扩展到了20位(32位中减去两个代理定数前缀,也就是减去12位代理附加位,剩下的有效位数为20位),其中前4位刚好可以表示16个增补平面的编号之一(因为2^4=16),后16位刚好可以表示一个增补平面中的所有码点(因为2^16=65536)。
如果第一个UTF-16单元是0xD800到0xDBFF的编码,第二个UTF-16单元是0xDC00到0xDFFF的编码,那么我们就把这两个UTF-16单元叫做一个「代理对」(surrogate pair),拼接成一个字符。具体操作为: 如果一个字符的Unicode码位在 U+010000 与 U+10FFFF 之间,那么先减去 0x10000,得到的数字写成二进制是yyyyyyyyyy xxx...
UTF-16可看成是UCS-2的父集。在没有辅助平面字符(surrogate code points)前,UTF-16与UCS-2所指的是同一的意思。但当引入辅助平面字符后,就称为UTF-16了。现在若有软件声称自己支持UCS-2编码,那其实是暗指它不能支持在UTF-16中超过2字节的字集。对于小于0x10000的UCS码,UTF-16编码就等于UCS码。ASCII ...
UTF-8 没有字节序问题,但是 UTF-16 和 UTF-32 有。 UTF-8 它只会把“C草𰻞”存成 43 E8 8D 89 F0 B0 BB 9E。 UTF-16 BE 会把“C草𰻞”存成 00 43 83 49 D8 83 DE DE。 UTF-16 LE 会把“C草𰻞”存成 43 00 49 83 83 D8 DE DE。
UTF-16 编码 UTF-16 也是一种变长字符编码, 这种编码方式比较特殊, 它将字符编码成 2 字节 或者 4 字节 具体的编码规则如下: 对于Unicode 码小于 0x10000 的字符, 使用 2 个字节存储,并且是直接存储 Unicode 码,不用进行编码转换 大于0x10FFFF 的 Unicode 码无法用 UTF-16 编码 ...
UTF-16中16的意思是16个bit的意思,也就是说是用16位来存储,但是它比较奇葩,它使用 2 个或者 4 个字节来存储 对于Unicode 编号范围在 0 ~ FFFF 之间的字符,UTF-16 使用两个字节存储,并且直接存储 Unicode 编号,不用进行编码转换,这跟 UTF-32 非常类似。
UTF-16:介于 UTF-8 和 UTF-32 之间,使用 2 个或者 4 个字节来存储,长度既固定又可变。 UTF 是 Unicode Transformation Format 的缩写,意思是“Unicode转换格式”,后面的数字表明至少使用多少个比特位(Bit)来存储字符。 1) UTF-8 UTF-8 的编码规则很简单:如果只有一个字节,那么最高的比特位为 0;如果有多...
由于UTF-16固定使用两个字节表示一个字符,所以UTF-16不能与ASCII兼容。 在不同的机器中UTF-16存在因存储方式不同(大端法和小端法)导致数据有误,因此存在UTF16-LE和UTF16-BE两种UTF16的变体。 相比较UTF-8,在存储中文方面,UTF16更加结合空间。 UTF-16容错情况比UTF-8好,因为UTF-16稳定使用两个字节编码,如果...
UTF-16解码时,按两个字节去检测,如果这两个字节都不在0xD800~0xDFFF之间,就说明是双字节编码的字符,使用双字节解码;如果这两个字节在0xD800~0xDFFF之间,说明是4字节编码的字符,以4字节解码。 2. UTF-8 Unicode Transformation Format 8,用1,2,3,4个字节对Unicode字符集进行编码,每个字符根据自己的编号范围...