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