Unicode 码位
Unicode 是一种国际编码标准,可用于各种平台以及各种语言和脚本。
Unicode 标准定义了超过 110 万个码位。 码位是一个整数值,范围从 0 到 U+10FFFF(十进制 1,114,111)。 一些码位被分配给字母、符号或表情符号。 其他码位分配给控制文本或 character 显示方式的操作,例如换行。 很多码位尚未经分配。
通常使用语法 U+xxxx 来表示码位,其中 xxxx 是十六进制编码的整数值。
整个码位范围包含两个子范围:
- U+0000..U+FFFF 范围内的基本多语言平面 (BMP)。 这个 16 位范围提供 65,536 个码位,足以涵盖世界上大多数编写系统。
- U+10000..U+10FFFF 范围内的补充码位。 这个 21 位范围提供了超过一百万个额外的码位,可用于不太知名的语言和其他用途,例如表情符号。
下图说明了 BMP 与补充码位之间的关系。
UTF-16 代码单位
16 位 Unicode 转换格式 (UTF-16) 是一种 character 编码系统,它使用 16 位代码单位来表示 Unicode 码位。 .NET 使用 UTF-16 对 string 中的文本进行编码。 char 实例表示一个 16 位代码单位。
单个 16 位代码单位可以表示基本多语言平面的 16 位范围内的任何码位。 但对于补充范围内的码位,需要两个 char 实例。
代理项对
通过称为“代理项码位”的特殊范围(从 U+D800 到 U+DFFF,十进制 55,296 到 57,343,含限值),可以将两个 16 位值转换为一个 21 位值。
下图说明了 BMP 与代理项码位之间的关系。
Unicode 标量值
术语“Unicode 标量值”是指除代理项码位之外的所有码位。 换句话说,标量值是分配有 character 或将来可以为其分配 character 的任何码位。 此处的“字符”是指可以分配给码位的任何内容,其中包括控制文本或 character 显示方式的操作。
下图演示了标量值码位。
作为标量值的 Rune 类型
从 .NET Core 3.0 开始,System.Text.Rune 类型表示 Unicode 标量值。 Rune 在 .NET Core 2.x 或 .NET Framework 4.x 中不可用。