Unicode标准字符集中 U+D800~U+DFFF 范围的码位是做什么的?

目前这块区域没有编码,也不清楚是用来做什么。只知道这块区域上面写了一个 UTF-16 surrogates(代理),不知道什么意思。
关注者
9
被浏览
12,402
登录后你可以
不限量看优质回答 私信答主深度交流 精彩内容一键收藏

这是一个典型的「字符集解决编码方案问题」的例子。

简单来说,取 U+D800..U+DBFF 内的一个码位同 U+DC00..U+DFFF 内的一个码位构成的序偶在 UTF-16 下会被解析为 U+10000..U+10FFFF 内的所有码位。

GB/T 13000 将 U+D800..U+DFFF 内的任一码位称为一个「RC 元素」,将 U+D800..U+DBFF 称为「高半区」,将 U+DC00..U+DFFF 称为「低半区」。

最后给一段 C 代码 [1]

typedef unsigned int16 UTF16;
typedef unsigned int32 UTF32;
const UTF16 HI_SURROGATE_START = 0xD800;
const UTF16 LO_SURROGATE_START = 0xDC00;
 * C -> (HiSurrogate, LoSurrogate)
 * xxxxxxxxxxxxxxxx -> xxxxxxxxxxxxxxxx
 * 000uuuuuxxxxxxxxxxxxxxxx -> 110110wwwwxxxxxx 110111xxxxxxxxxx
UTF16 X = (UTF16) C;
UTF32 U = (C >> 16) & ((1 << 5) - 1);
UTF16 W = (UTF16) U - 1;
UTF16 HiSurrogate = HI_SURROGATE_START | (W << 6) | X >> 10;
UTF16 LoSurrogate = (UTF16) (LO_SURROGATE_START | X & ((1 << 10) - 1));
 * (hi, lo) -> C