16位编码,所有位都映射到某个值

时间:2018-11-06 16:08:00

标签: unicode encoding utf-16 utf 16-bit

UTF-32的最后一位清零。 据我了解,UTF-16也不使用其所有位。

是否有一种16位编码,其中所有位组合都映射到某个值,最好是UTF的子集,例如7位的ASCII码?

1 个答案:

答案 0 :(得分:2)

  

UTF-32的最后一位清零

这可能不正确,具体取决于您的计算方式。通常我们从左数,所以UTF-32的高(即第一个)位将为零

  

据我了解,UTF-16也不使用其所有位

也不正确。 UTF-16使用其所有位。只是[{x3}}保留了范围[0xD800–0xDFFF],因此这些值将永远不会被分配任何字符,也不会出现在UTF-32中。如果您需要使用UTF-16在BMP之外对字符进行编码,则将使用这些值

实际上,即使UTF-8和UTF-32本身最多可以分别表示U + 7FFFFFFF和U + FFFFFFFF,Unicode也仅由于UTF-16而限于U + 10FFFF。使用代理对使得无法在UTF-16中编码大于0x10FFFF的值

请参见UTF-16 surrogate pairs

  

是否有一种16位编码,其中所有位组合都映射到某个值,最好是UTF的子集,例如7位的ASCII码?

首先,因为Why Unicode is restricted to 0x10FFFF?

,所以没有“ UTF的子集”之类的东西

在存在UTF-16 Unicode之前,是使用UTF isn't a character set but a way to encode Unicode code points编码的固定16位字符集。因此,UCS-2可能是最接近您的,它仅对BMP中的字符进行编码。其他固定的16位非Unicode字符集也具有一种将所有位组合映射到某些字符的编码

但是您为什么要那样? UCS-2早已过时。一些旧工具和经验不足的程序员仍然暗示Unicode总是16位长,就像正确的那样,它将破坏现代文本处理

还要注意,并非所有0xFFFF以下的值都被分配,因此没有编码可以将每个16位值映射到Unicode代码点

进一步阅读