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

16-bit encoding that has all bits mapped to some value

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

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

UTF-32 has its last bits zeroed

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

As I understand it UTF-16 doesn't use all its bits either

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

事实上,Unicode 仅限于 U+10FFFF 只是因为 UTF-16,即使 UTF-8 和 UTF-32 本身能够分别表示最多 U+7FFFFFFF 和 U+FFFFFFFF。使用代理对使得无法在 UTF-16

中编码大于 0x10FFFF 的值

Is there a 16 bit encoding that has all bit combinations mapped to some value, preferably a subset of UTF, like ASCII for 7 bit?

首先,没有“UTF 子集”这样的东西,因为 UTF isn't a character set but a way to encode Unicode code points

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

但是你为什么想要那个? UCS-2 很久以前就被弃用了。一些旧工具和经验不足的程序员仍然暗示 Unicode 总是 16 位长,这是正确的,并且会破坏现代文本处理

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

进一步阅读