这个问题与Construct python库有关,尽管这并不重要。
我正在编写一段需要解析UTF16 / 32编码字符串的代码,没有前缀(类似于PascalString),并且随后有任意数据。我需要有人来确认我的理解哦这些编码。如果这些假设成立,我知道如何编写解析器。
我意识到一些代码点不一定是2个字节(UTF16)。
答案 0 :(得分:1)
是的,根据定义,UTF-16必须是2个字节的倍数,而UTF-32必须是4个字节的倍数。
对于UTF-32,每个代码点将为4个字节。对于UTF-16,每个代码点可以是2或4个字节,这将由字值确定 - 0xd800到0xdfff将仅出现在4个字节序列中,其余的仅出现在2个字节序列中。有关详细信息,请参阅Wikipedia page on UTF-16。
Codepoint 0未正式从Unicode中排除,因此它可能显示为有效序列的一部分。这是不太可能的,因此使用它来标记字符串的结尾并不是不合理的。