如果第一个UTF-16单元是0xD800到0xDBFF的编码,第二个UTF-16单元是0xDC00到0xDFFF的编码,那么我们就把这两个UTF-16单元叫做一个「代理对」(surrogate pair),拼接成一个字符。具体操作为: 如果一个字符的Unicode码位在 U+010000 与 U+10FFFF 之间,那么先减去 0x10000,得到的数字写成二进制是yyyyyyyyyy xxx...
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-32 BE 会把“C草𰻞”存成 00 00...
UTF-16中16的意思是16个bit的意思,也就是说是用16位来存储,但是它比较奇葩,它使用 2 个或者 4 个字节来存储 对于Unicode 编号范围在 0 ~ FFFF 之间的字符,UTF-16 使用两个字节存储,并且直接存储 Unicode 编号,不用进行编码转换,这跟 UTF-32 非常类似。 对于Unicode 编号范围在 10000~10FFFF 之间的字符,U...
首先查询 "中"字的 Unicode 码 0x4E2D, 转成二进制, 总共有 16 个二进制位, 具体如上图 步骤1 所示 通过前面的 Unicode 编码和 UTF-8 编码的表格知道,Unicode 码 0x4E2D对应 000800 - 00FFFF的范围,所以, "中"字的 UTF-8 编码 需要 3个字节,即格式是 1110xxxx 10xxxxxx 10xxxxxx ...
1.若U < 0x10000,字符的UTF-16编码就是U对应的16位二进制。 2.若U ≥ 0x10000,则把字符拆分为2部分(U+10000 ~ U+10FFFF的空间大小是2^20),前十位映射到U+D800U+DBFF,后十位映射到U+DC00U+DFFF。 具体拆分计算如下: 计算U'=U-0x10000, 将U'写成二进制形式:yyyy yyyy yyxx xxxx xxxx,然后将...
于是 Unicode 与 ISO/IEC 10646 新标准规定 UTF-8 、UTF-16、UTF-32 三种编码。UTF-8 是兼容 ASCII ,UTF-32 是定长编码,而 UTF-16 则是为了向下兼容旧标准(UCS-2),重新规定成了一个既不兼容ASCII ,又是变长编码,还有字节序问题的垃圾方案。UTF-16 是一个历史性的错误,是应该被扫进历史垃圾堆的东西...
如前文所述,为了让UTF-16能继续编码基本平面后面的增补平面中的码点值,于是扩展了UTF-16编码方式。 具体的扩展方法就是为其增加了代理机制,用两个对应于基本平面码点(即BMP代理区中的码点)的16位码元来表示一个增补平面码点,这两个用来表示一个增补平面码点的特殊16位码元就被称为“代理对”。
需要注意的是:UTF是Unicode TransferFormat的缩写,UTF-8和UTF-16都是把Unicode码转换成程序数据的一种编码方式。 UTF-8 概念 UTF-8(8-bit Unicode Transformation Format)是一种针对Unicode的可变长度字符编码,又称万国码。由Ken Thompson于1992年创建。现在已经标准化为RFC 3629。UTF-8用1到6个字节编码Unicode...
UTF-16 is an encoding of Unicode in which each character is composed of either one or two 16-bit elements.