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

需要通过UTF等对Unicode字符进行编码吗?为什么可以';我们不能简单地将它们存储为二进制代码点吗?,unicode,utf,Unicode,Utf,Unicode只需为每个字符分配一个整数。UTF-8或其他用于将这些整数(“代码点”)编码为存储在内存中的字节序列。我的问题是,为什么我们不能简单地将字符存储为其Unicode值的二进制表示形式(“代码点”)?因此,有些语言具有需要多个字节来表示的字符。将它们存储为二进制代码点不是更容易吗?是的,我们可以,这就是UTF-32 问题是UTF-32浪费了很多空间。如果文本包含大量的欧洲/希伯来语/阿拉伯语文本,使用UTF-8,每个代码点只需要1到2个字节,但使用UTF-32,每个代码点需要4个字节

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

是的,我们可以,这就是UTF-32

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


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

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

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

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

如何准确地保存这些代码点?有些代码点可以放入一个字节,有些需要3个字节。每个代码点使用4个字节吗?当您查看字节流时,您如何知道一个代码点在哪里结束,另一个代码点在哪里开始?UTF-8(和其他编码)为您提供了答案。

我不理解您所说的“字节流”他们的二进制代码点"? 这不正是已经发生的事情吗?代码点的确切二进制总是需要4个字节,但如果我没有弄错的话,UTF-8或UTF-16中不会发生这种情况。某些字符的编码长度小于4字节。我的意思正是他们的二进制代码。抱歉搞混了,谢谢。但有一件事我不明白,有些字符有什么特别之处,它们只能容纳1或2个字节,而有些字符需要更多字节?谢谢。但有一件事我不明白,有些字符有什么特别之处,它们只能容纳1或2个字节,而有些字符需要更多的字节?@Daud:这些字符使用得更频繁。谢谢。我想我终于明白了。某些语言需要超过1个字节,因为它们的字符集超过256个字符。谢谢你的坚持。@Daud:不。你仍然认为Unicode是某种“代码页”。@Daud:不。你仍然认为Unicode是某种依赖于语言的“代码页”,这是不正确的。Unicode可以代表这个星球上几乎所有的字符。有些Unicode编码中,某些语言比其他语言需要更少的磁盘存储空间。如果只处理英文文本,UTF-8可能是最好的编码,因为大多数字符只需要1个字节编码。在多语言环境中,UTF-16可能更有效。在中文文本中,GB18030可能是另一种选择,它与UTF-8相当,但针对汉字进行了优化。