Unicode 将所有位映射到某个值的16位编码

Unicode 将所有位映射到某个值的16位编码,unicode,encoding,utf-16,utf,16-bit,Unicode,Encoding,Utf 16,Utf,16 Bit,UTF-32的最后一位已归零。 据我所知,UTF-16也没有使用所有的位 是否有一种16位编码,它将所有位组合映射到某个值,最好是UTF的子集,如7位的ASCII UTF-32的最后一位已归零 这可能不正确,具体取决于您的计数方式。通常我们从左开始计数,因此UTF-32的高位(即第一位)将为零 据我所知,UTF-16也没有使用所有的位 这也不正确。UTF-16使用其所有位。只是[0xD800-0xDFFF]的范围是保留的,因此这些值永远不会被分配任何字符,也永远不会出现在UTF-32中。如果需要

UTF-32的最后一位已归零。 据我所知,UTF-16也没有使用所有的位

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

UTF-32的最后一位已归零

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

据我所知,UTF-16也没有使用所有的位

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

事实上,由于UTF-16,Unicode仅限于U+10FFFF,即使UTF-8和UTF-32本身能够分别表示U+7FFFFFF和U+FFFFFF。使用代理项对使得无法在UTF-16中编码大于0x10FFFF的值

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

首先,没有“UTF的子集”这样的东西,因为

在UTF-16出现之前,Unicode是一个固定的16位字符集,用。因此UCS-2可能是最接近的,它只编码BMP中的字符。其他固定的16位非Unicode字符集也具有将所有位组合映射到某些字符的编码

然而,你为什么要这样做?UCS-2早就被弃用了。一些旧的工具和经验较少的程序员仍然暗示Unicode总是16位长,这是正确的,将破坏现代文本处理

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

进一步阅读

那么,您是否要求任何字符编码(对于任何字符集)具有16位代码单位,并使用所有值0到65535作为有效代码单位?为什么?