1

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

4

3 回答 3

2

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

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

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

于 2010-09-18T11:09:02.183 回答
1

您将如何保存这些代码点?有些代码点适合一个字节,有些需要 3 个字节。每个代码点会使用 4 个字节吗?当您查看字节流时,您如何知道一个代码点在哪里结束而另一个在哪里开始?UTF-8(和其他编码)给你答案。

于 2010-09-18T11:10:11.547 回答
0

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

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

  • ASCII 兼容性:只包含 U+0000 - U+007f 的文件根本不需要更改
  • 大小效率:UTF-8 通常以小得多的文件结束
于 2010-09-18T11:09:59.260 回答