unicode - 16 位编码,所有位都映射到某个值
问题描述
UTF-32 的最后一位归零。据我了解,UTF-16 也不使用它的所有位。
是否有 16 位编码将所有位组合映射到某个值,最好是 UTF 的子集,例如 7 位的 ASCII?
解决方案
UTF-32 的最后一位归零
这可能不正确,具体取决于您的计数方式。通常我们从左数,所以 UTF-32 的高(即第一位)位将为零
据我了解,UTF-16 也不使用它的所有位
也不正确。UTF-16 使用它的所有位。只是范围 [0xD800—0xDFFF] 是为UTF-16 代理对保留的,因此这些值永远不会被分配任何字符,也永远不会出现在 UTF-32 中。如果您需要使用 UTF-16 对 BMP 之外的字符进行编码,则将使用这些值
事实上,Unicode 被限制为 U+10FFFF 只是因为 UTF-16,尽管 UTF-8 和 UTF-32 本身能够分别表示最多 U+7FFFFFFF 和 U+FFFFFFFF。代理对的使用使得无法在 UTF-16 中对大于 0x10FFFF 的值进行编码
是否有 16 位编码将所有位组合映射到某个值,最好是 UTF 的子集,例如 7 位的 ASCII?
首先,没有“UTF 的子集”之类的东西,因为UTF 不是字符集,而是一种编码 Unicode 代码点的方法
在 UTF-16 存在之前,Unicode 是使用UCS-2编码的固定 16 位字符集。因此,UCS-2 可能是您将得到的最接近的,它仅编码 BMP 中的字符。其他固定的 16 位非 Unicode 字符集也具有将所有位组合映射到某些字符的编码
但是,您为什么要那样做?UCS-2 早就被弃用了。一些旧工具和经验不足的程序员仍然暗示 Unicode 始终是 16 位长,这是正确的,并且会破坏现代文本处理
另请注意,并非所有低于 0xFFFF 的值都已分配,因此没有编码可以将每个 16 位值映射到 Unicode 代码点
进一步阅读
推荐阅读
- null - Impala - replace NULL to zero for entire table
- linux - 如何在 GNU/Linux cli 上使用 find regex 排除新行(回车)?
- reactjs - 使用 Switch 标签后 React-Router 不起作用
- python - 字符串比较的时间复杂度
- python - 使用请求获取无效的密码响应,但密码适用于手动登录
- python - 无论输入如何,打印语句默认为第一个“if”语句
- sql - SQL按多值字符串列中的不同值分组
- python - ImportError:无法导入名称“regex_replace”
- python - 如何设置一个等于月和日的变量,然后用它做数学?
- python-3.x - 使用gremlin python进行depth4和breadth4搜索