【问题标题】:UTF16 and UTF32 decoder schema assumptionsUTF16 和 UTF32 解码器模式假设
【发布时间】:2018-01-25 01:58:45
【问题描述】:

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

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

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

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

【问题讨论】:

  • 2/4 字节的倍数——是的。一些代码点(一些 Emoji 和一些中文)需要 2 个 UTF16 字节对(但只有 1 个 4 字节 UTF32)。

标签: python unicode python-unicode unicode-string


【解决方案1】:

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-06-08
    • 2020-07-29
    • 2016-10-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-06-29
    相关资源
    最近更新 更多