UTF16和UTF32解码器模式假设

时间:2018-01-25 01:58:46

标签: python unicode python-unicode unicode-string

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

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

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

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

1 个答案:

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