这个问题与构造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 中排除,因此它可能显示为有效序列的一部分。这不太可能,因此使用它来标记字符串的结尾并非不合理。