代码之家  ›  专栏  ›  技术社区  ›  Daud

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

  •  1
  • Daud  · 技术社区  · 15 年前

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

    3 回复  |  直到 15 年前
        1
  •  2
  •   kennytm    15 年前

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

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

    如果将整数值存储为可变大小,例如0~255使用1字节,256~65535使用2字节等,则会出现歧义问题,例如should 5a 5a

        2
  •  1
  •   Peter Å tibraný    15 年前

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

        3
  •  0
  •   Delan Azabani    15 年前

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

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

    • ASCII兼容性:只包含U+0000-U+007f的文件根本不需要更改