通俗易懂的 Unicode 和 UTF-8 解释
Unicode 是什么?
想象一下,我们有一个巨大的图书馆,这个图书馆里有各种各样的书,每本书都有一个唯一的编号。Unicode 就像是这个图书馆的目录系统,它给世界上所有的字符(比如字母、数字、符号、汉字等)一个独一无二的编号(称为“编码点”)。
UTF-8 是什么?
现在,我们需要把这些书从图书馆搬到别的地方,但每本书有大有小。我们需要一种方法来打包这些书,方便运输和存储。这时候,UTF-8 就派上用场了。UTF-8 是一种打包规则,它规定了怎么把这些书(字符)打包成小盒子(字节)。
具体怎么打包?
- 小书(常见字符):比如英语字母,可以用一个小盒子(1 个字节)装下。
- 中等书(其他字符):比如一些欧洲语言的字符,需要用两个小盒子(2 个字节)。
- 大书(汉字):比如中文字符,需要三个小盒子(3 个字节)。
- 特大书(罕见字符):有些特别少见的字符需要四个小盒子(4 个字节)。
举个例子
-
字符 ‘A’:
- Unicode 给它的编号是
U+0041
。 - UTF-8 用一个盒子(1 个字节)装下它,编码是
0x41
。
- Unicode 给它的编号是
-
字符 ‘你’:
- Unicode 给它的编号是
U+4F60
。 - UTF-8 用三个盒子(3 个字节)装下它,编码是
0xE4 0xBD 0xA0
。
- Unicode 给它的编号是
总结
- Unicode 就像是一个图书馆的目录系统,给每个字符一个唯一编号。
- UTF-8 是把这些字符打包成字节的小盒子的规则,用不同大小的盒子装不同的字符。
通过这种方式,我们可以把世界上所有的字符(Unicode 和 UTF-8 使得我们能够处理几乎所有语言的字符)都打包并传输到任何地方(无论你在世界的哪个地方,使用什么设备或应用程序,只要它们支持 Unicode 和 UTF-8,就能够正确地识别和显示这些字符),而不会弄混淆。UTF-8 尤其好用,因为它和我们熟悉的英语字符(ASCII)兼容,而且能够灵活处理各种语言的字符。
ps:学过哈夫曼编码都知道前缀码的概念,值得注意的是 UTF-8 也是一种前缀码(Prefix Code)。前缀码是一种编码方式,其中没有任何一个编码单元(码字)是另一个编码单元的前缀。在这种编码方式下,每个字符的编码都是独立的,并且可以通过从左到右解码不需要回溯。