如果第一个UTF-16单元是0xD800到0xDBFF的编码,第二个UTF-16单元是0xDC00到0xDFFF的编码,那么我们就把这两个UTF-16单元叫做一个「代理对」(surrogate pair),拼接成一个字符。具体操作为: 如果一个字符的Unicode码位在 U+010000 与 U+10FFFF 之间,那么先减去 0x10000,得到的数字写成二进制是yyyyyyyyyy xxx...
UTF-16 能表示的字符数有 6 万多,看起来很多,但是实际上目前 Unicode 5.0 收录的字符已经达到 99024 个字符,早已超过 UTF-16 的存储范围;这直接导致 UTF-16 地位颇为尴尬——如果谁还在想着只要使用 UTF-16 就可以高枕无忧的话,恐怕要失望了 UTF-16 存在大小端字节序问题,这个问题在进行信息交换时特别突出—...
UTF-16是一种可变长度字符编码方式,以16-bit为单元,使用2个或4个字节为每个字符编码。其编码规则如下: 1.若U < 0x10000,字符的UTF-16编码就是U对应的16位二进制。 2.若U ≥ 0x10000,则把字符拆分为2部分(U+10000 ~ U+10FFFF的空间大小是2^20),前十位映射到U+D800U+DBFF,后十位映射到U+DC00U...
1.首先要注意的是,代理(Surrogate)是专属于UTF-16编码方式的一种机制,UTF-8和UTF-32是不用代理的。 如前文所述,为了让UTF-16能继续编码基本平面BMP后面的增补平面SP中的码点值,于是扩展了UTF-16编码方式。 具…
UTF-32 编码 UTF-32 是固定长度的编码,始终占用 4 个字节,足以容纳所有的 Unicode 字符,所以直接存储 Unicode 码即可,不需要任何编码转换。虽然浪费了空间,但提高了效率。 UTF-8、UTF-16、UTF-32 之间如何转换 前面介绍过,UTF-8、UTF-16、UTF-32 是 Unicode 码表示成不同的二进制格式的编码规则,同样,通过...
由于UTF-16固定使用两个字节表示一个字符,所以UTF-16不能与ASCII兼容。 在不同的机器中UTF-16存在因存储方式不同(大端法和小端法)导致数据有误,因此存在UTF16-LE和UTF16-BE两种UTF16的变体。 相比较UTF-8,在存储中文方面,UTF16更加结合空间。 UTF-16容错情况比UTF-8好,因为UTF-16稳定使用两个字节编码,如果...
utf-8是变长编码方案,它以8-bit为编码单元,英语、数字占用1个字节,绝大多数汉语占3个字节。 utf-16也是变长编码方案,它以16-bit为编码单元,最开始计划用16-bit(也就是2个字节)表示unicode中的所有字符(基本多语言平台中的字符),但是后来unicode扩容了(扩容的部分称为辅助平面),16-bit不够用的,对于辅助平面...
UTF-16:介于 UTF-8 和 UTF-32 之间,使用 2 个或者 4 个字节来存储,长度既固定又可变。 UTF 是 Unicode Transformation Format 的缩写,意思是“Unicode转换格式”,后面的数字表明至少使用多少个比特位(Bit)来存储字符。 1) UTF-8 UTF-8 的编码规则很简单:如果只有一个字节,那么最高的比特位为 0;如果有多...
UTF-16利用保留下来的0xD800-0xDFFF区段的码位来对辅助平面的字符的码位进行编码。在UTF-16中,从U+10000到U+10FFFF的码位被编码为一对16比特长的码元,称作代理对,具体方法是:码位减去0x10000,得到的值的范围为20比特长的0..0xFFFFF,写成二进制形式:yyyy yyxx xxxx xxxx。©...