UTF16 和 UTF32 解码器架构假设

UTF16 and UTF32 decoder schema assumptions

这个问题与 Construct python 库有关,尽管这不是很重要。

我正在编写一段代码,需要解析 UTF16/32 编码的字符串,没有前缀(类似于 PascalString),后面有任意数据。我需要有人来确认我对这些编码的理解。如果这些假设成立,我知道如何编写解析器。

我意识到有些代码点不一定是 2 个字节 (UTF16)。

是的,根据定义,UTF-16 必须是 2 字节的倍数,而 UTF-32 必须是 4 字节的倍数。

对于 UTF-32,每个代码点为 4 个字节。对于UTF-16,每个codepoint可能是2个或4个字节,这将由字值决定——0xd800到0xdfff只会出现在4个字节序列中,其余只会出现在2个字节序列中。有关详细信息,请参阅 Wikipedia page on UTF-16

代码点 0 并未正式排除在 Unicode 之外,因此它可能作为有效序列的一部分出现。不太可能,所以用它来标记字符串的结束也不是没有道理的。