UTF16是如何对字符进行编码的?

How does UTF16 encode characters?

编辑

因为我似乎不会得到一般问题的答案。我将限制在一个细节上:我对以下内容的理解正确吗?

代理人的工作方式如下:

  1. 如果 D800 和 DBFF 之间的第一对字节 不是 - 那里 不会是第二对。
  2. 如果它在 D800 和 DBFF 之间 - a) 会有第二对 b) 第二对将在 DC00 和 DFFF 范围内。
  3. 不存在值介于 D800 之间的单对 UTF16 字符 和 DBFF。
  4. 不存在值介于 DC00 之间的单对 UTF16 字符 和 DFFF。

这样对吗?

原题

我已经尝试阅读有关 UTF16 的内容,但我似乎无法理解它。 "planes" 和 "surrogates" 等是什么? "plane" 是第一个字节的前 5 位吗?如果是这样,那么为什么不使用 32 个平面呢,因为我们无论如何都在使用这 5 位?什么是代理人?分别对应哪些位?

我知道 UTF16 是一种编码 Unicode 字符的方法,它有时使用 16 位编码字符,有时使用 32 位,不多也不少。我 假设 前 2 个字节有一些值列表(哪些是最重要的?)这表明将存在第二个 2 个字节。

但是我不继续说我明白的东西,也许有人可以在这方面做些安排?

是的,全部四个。

澄清一下,UTF-16 中的术语 "pair" 指的是两个 UTF-16 代码单元,第一个在 D800-DBFF 范围内,第二个在 DC00-DFFF 范围内。

一个代码单元是16位(2字节),通常写成十六进制的无符号整数(0x000A)。字节顺序(0x00 0x0A 或 0x0A 0x00)由作者指定或在文件或流的开头用 BOM (0xFEFF) 指示。 (BOM 使用与文本相同的算法进行编码,但不是文本的一部分。一旦确定了字节顺序并将字节重新排序为系统的本机顺序,它通常会被丢弃。)