字符编码的发展历程
我们都知道计算机最早是在美国诞生和发展的,所以关与计算机方面的很多标准和规定都是那帮美国佬搞出来的,这其中也包括字符编码。
最早的字符编码方案 —— ASCII 编码方案。老美那帮人都是讲英语的,所以ASCII 编码方案也只是将英语中使用的 字母 和 标点符号,以及一些 控制字符 编入进去。这特么一共才几个字符啊,很显然一个字节就能表示 256 种状态,完全能搞定啊,所以 ASCII 编码方案就这么出来了。这套方案也被用来最为最早的国际标准,等同于 国际标准 ISO/IEC 646。
时间往后推一推,计算机在其他国家也开始发展起来了,这套只能显示英语的编码方案肯定就吃不开了啊。于是许多国家也推出自己的编码方案,这其中也包括咱们国家。
再来看一下咱们国家的编码方案发展,先后出现了 GB2312、GBK 和 GB18030 三个编码方案。最早的 GB2312 编码 方案收录了 6763 个汉字,以及拉丁字母、希腊字母等等。这套方案只能满足汉字的基本使用。
大家都知道咱们国家的文化是博大精深的,六千多点汉字够个锤子用啊。OK,马上咱们就对这个方案进行了扩展推出了 GBK 编码方案(也叫 汉字内码扩展规范),对于汉字的收录一下增加到了 21886 个。
随着时间的推移 GBK 这套方案,也出现了局限性。(例如:1. 咱们国家不光有汉字还有满文、蒙文、藏文等等等等;2. 人们在使用计算机的时候可能还会用到韩文、日文等。)所以在 GBK 的基础上又推出了 GB18030 编码方案,其中仅仅是汉字就收录了 70244 个,还有日文和韩文等等。
看到这里咱们就发现,计算机和互联网的发展就是要联系全世界嘛。如果每个国家都搞自己的那套标准不是与这个理念相违背啊,也不利于软件程序的国际化。这个时候就需要一套全世界通行,且收录全世界的文字符号的编码方案,于是 Unicode 就应运而生。
关与 GB 2312、GBK、GB 18030 编码方案中具体是如何编码的,咱也不用知道,反正也不怎么用。
Unicode 编码系统
我们常见到的一句话就是 “UTF-8、UTF-16、UTF-32 是 Unicode 编码的具体实现方式。”。那这句话到底什么意思呢?
首先我们要搞清楚 Unicode 不同于我们之前所说的 ASCII、GB2312、GBK、GB18030,Unicode 不是具体的编码方案。Unicode 是 编码系统,它里面包含了 字符集 和 编码方案。
字符集 就是 Unicode 收录的所有字符的集合,Unicode 会赋予每个收录的字符一个唯一编号,我们管它叫 Unicode 码。而 UTF-8、UTF-16、UTF-32 我们应该叫它们 UTF-8 编码方案、UTF-16 编码方案、UTF-32 编码方案。UTF-8 就是 Unicode 编码系统里的一种具体的编码方案,它会将字符的 Unicode 码转换为一串二进制数。
说到这里我们可能就理解了开头那句话了。
解释概念:
- Unicode 码 就是Unicode编码系统赋予字符的唯一编号,记住本质是 编号。
- UTF-8 码 则是将 Unicode 码通过一定规则转换成的一串二进制数字。
关与 UTF-8、UTF-16、UTF-32 具体的编码规则,大家看兴趣了解。不知道也没啥关系,只要记住咱们都用 UTF-8 就行了。
还有一点,在计算机内存中统一使用 Unicode 码,当需要保存到硬盘或者需要传输的时候,就转换为 UTF-8 码。(例如:当用记事本编辑的时候,从文件读取的 UTF-8 字符被转换为内存中的 Unicode 字符,编辑完成后,当保存的时候再把 Unicode 转换为 UTF-8 保存到文件中。当浏览网页的时候,服务器也会把动态生成的 Unicode 内容转换为 UTF-8 再传输到浏览器。)
上面我们说到Unicode 字符集致力于收录世界上所以得文字符号,至今仍处于不断曾修状态。目前最新的版本为 2021 年 9 月公布的 14.0.0 版本,共收录超过14 万个字符。