Unicode 与 UTF-8

52 阅读2分钟

Unicode

首先说为什么要有 Unicode 以及 Unicode 具体是什么。

计算机发展早期,使用的是 ASCII 编码,这个我们很熟悉,长度为一个字节,可以表示 256 种情况。但是很快,随着计算机的发展,这种编码显然是不够用的,各国的文字、各种 emoji等等,ASCII 根本无法装下,于是就有了 Unicode。

Unicode 是一种规范,并不是一种具体的编码实现方式。Unicode 是“字符集标准”(定义所有字符的编号),它只做两件事情:

  • 定义全世界所有的字符

  • 给每个字符分配一个唯一的码点

例如:

  • A 的码点是 U+0041

  • 中 的码点是 U+4E2D

  • 😀 的码点是 U+1F600

Unicode 并不关心“如何存储这个字符”,它只定义字符和码点之间的关系。

可以把 Unicode 想象成一份字典,只规定 :字符 = 整数编号。

UTF-8

前面提到,Unicode 实际上是一个标准,并不关心具体的实现,那么具体如何实现,就是 UTF-8 做的事情了,UTF-8 是一种实现 Unicode 的编码方式。

它的职责是:把 Unicode 码点转换成字节序列。

除了 UTF-8,实际上还有 UTF-16、UTF-32等等,它们都属于 Unicode 编码方案。

UTF-8的特点是:

  • 可变长度编码(1 到 4 字节)

  • ASCII 范围 0x00–0x7F 只占 1 字节,与 ASCII 完全兼容

  • 中文这种高码点字符会占 3 字节,例如 中 (U+4E2D) 编码为 E4 B8 AD

最后一句话总结 Unicode 与 UTF-8的关系:假如 Unicode 是全国公民身份证号系统,每个人都有唯一编号,那么 UTF-8 则像是身份证的打印规则,需要设计编号怎么编码成身份证号这种格式。