unicode - 需要通过 UTF 等对 Unicode 字符进行编码吗?为什么我们不能简单地将它们存储为代码点的二进制?

标签 unicode utf

Unicode 只是为每个字符分配一个整数。 UTF-8 或其他用于将这些整数(“代码点”)编码为要存储在内存中的字节序列。我的问题是,为什么我们不能简单地将字符存储为其 Unicode 值(“代码点”)的二进制表示形式?因此,某些语言的字符需要多个字节来表示。将它们作为代码点的二进制存储不是更容易吗?

最佳答案

是的,我们可以,那就是 UTF-32。

问题是 UTF-32 浪费了大量空间。如果文本包含大量欧洲/希伯来语/阿拉伯语文本,则使用 UTF-8,每个代码点仅需要 1 到 2 个字节,但使用 UTF-32,每个代码点需要 4 个字节。

如果我们将整数值存储为可变大小,例如0 ~ 255 使用 1 个字节,256 ~ 65535 使用 2 个字节等,我们会遇到歧义问题,例如5a 5a 应该代表“ZZ”还是“婚”?基本上,解决方案就是我们所说的 UTF-8——我们使用一些特殊位来指示字节序列的长度,以给出唯一的解码结果。

关于unicode - 需要通过 UTF 等对 Unicode 字符进行编码吗?为什么我们不能简单地将它们存储为代码点的二进制?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3741432/

相关文章:

regex - 维基数据查询以获取国家同义词而不是国旗符号

string - fatal error : high- and low-surrogate code points are not valid Unicode scalar values

python - 如何转义在串行术语中接收和转义的西里尔字母代码

php - 如何使用javascript写一个非英文字符的cookie并让php正确读取

python - 获取 Unicode 字符串所需的字节数

unicode - Lua支持Unicode吗?

c++ - 如何在 rc 文件中设置对话框代码页

Python 0xff 字节

php - 如何在 PHP 中验证 utf 序列?

java.io.UnsupportedEncodingException : unicode-1-1-utf-7?