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

时间:2010-09-18 11:05:43

标签: unicode utf

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

3 个答案:

答案 0 :(得分:2)

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

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

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

答案 1 :(得分:1)

您如何保存这些代码点?一些代码点适合一个字节,一些需要3个字节。你会为每个代码点使用4个字节吗?当您查看字节流时,您如何知道一个代码点的结束位置和另一个代码点的开始位置? UTF-8(以及其他编码)可以为您提供答案。

答案 2 :(得分:0)

首先,有一种方法可以将它们存储为原始代码点。这是UTF-32或UCS-4。每个字符总是四个字节,并且不加修改地存储每个代码点。

但是,使用UTF-8等其他原因包括:

  • ASCII兼容性:仅包含U + 0000 - U + 007f的文件根本不需要更改
  • 尺寸效率:UTF-8通常以更小的文件结尾