UTF16 和 UTF32 解码器架构假设



这个问题与构造python库有关,尽管这并不重要。

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

  • UTF16 必须是 2 字节的倍数,最后一个块(并且仅最后一个(必须是 \x00\x00
  • UTF32 必须是 4 个字节的倍数,最后一个块(并且仅最后一个(必须是
  • \x00\x00\x00\x00

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

是的

,根据定义,UTF-16 必须采用 2 个字节的倍数,UTF-32 必须采用 4 个字节的倍数。

对于 UTF-32,每个代码点将为 4 个字节。对于 UTF-16,每个代码点可以是 2 或 4 个字节,这将由单词值决定 - 0xd800 到 0xdfff 将仅以 4 字节序列出现,其余的将仅以 2 字节序列出现。有关详细信息,请参阅有关 UTF-16 的维基百科页面。

Codepoint 0 未正式从 Unicode 中排除,因此它可能显示为有效序列的一部分。这不太可能,因此使用它来标记字符串的结尾并非不合理。

相关内容

最新更新