文章目录
- 前言
- 一、字符编码集的历史
- 1.ASCII码
- 2.Extended ASCII码
- 3.字符编码集的国际化
- 二、中文编码集
前言
今天给大家介绍计算机的字符与编码集,分为两部分:字符编码集的历史、中文编码集。
一、字符编码集的历史
这部分包含三个板块内容:ASCII码、Extended ASCII码、字符编码集的国际化。
1.ASCII码
对于ASCII码,相信接触过编程的人应该都不陌生,它是我们平时常用的一种编码方式,如大小写字母、数字、符号等等都是属于ASCII码里面的。ASCII码特点如下:
- 使用7个bits就可以完全表示ASCII码
- 包含95个可打印字符
- 33个不可打印字符(包括控制字符)
我们可以做个简单运算:33 + 95 = 128 = 2^7,接下来我们通过下表来完整了解ASCII码的所有字符:
从表中我们可以看出,前面的32个控制字符加上表中最后一个共是33个控制字符,其他的都是我们常见的可打印字符。二战时期,计算机最早诞生于美、英国家,所以在计算机发展的早期,ASCII码就已经能满足相关国家和科学家的使用。
但随着计算机发展及普及,ASCII码逐渐无法满足需求。主要表现在:ASCII码里面,很多应用或者国家中的符号都无法表示。如数学符号 “÷ ≠ ≥ ≈ π” 等等一些字符ASCII码都无法表示。
这时候就想到了第一次对ASCII码进行扩充,7bits => 8bits,使用8个比特位代替原来的7比特,那么原来的 127 个字符就可以扩充为 256 个字符了,也就是可拓展的ASCII码:Extended ASCII码。
2.Extended ASCII码
如下表所示,为扩展的那部分ASCII码:
从中可以看到,包含了常见数学运算符、带音标的欧洲字符、其他常用符、表格符等。使用了这个可拓展的ASCII码极大的补充了原来ASCII码所不能展示的内容,使得计算机所能表达的内容越来越丰富。
虽然在这里面,可拓展的ASCII码补充了原有ASCII码所不能表达的内容。但是随着计算机的进一步发展,越来越多的国家加入了使用计算机的行列当中,那么这个时候,对于计算机的字符与编码集的要求也越来越高,我们就需要了解字符编码集的国际化了。
3.字符编码集的国际化
对于字符编码集的国际化,有着如下的背景:
- 欧洲、中亚、东亚、拉丁美洲国家的语言多样性
- 语言体系不一样,不以有限字符组合的语言(如拿中文和英文做比较,对于英文来说所有单词都是由26个字母组成。但是中文就不一样了,除了偏旁部首外,每个字都是独立的,可以再组成不同词汇,也就是不以有限字符为组合)
- 中国、韩国、日本等的语言最为复杂
在这种情况下,字符编码集的国际化就尤为重要了。在这里面,我们主要是了解中国的字符编码集,接下来就来到第二个大板块。
二、中文编码集
对于中文编码集,首先要介绍的是 GB2312,该编码集是在1980年发明出来,也是我国最早发明的编码集。它的全称是《信息交换用汉字编码字符集-------基本集》,简称 GB2312(国标2312)。这个编码集一共收录了 7445 个字符,其中包括 6763 个汉字和 682 个其它符号。
虽然这个编码集有比较完备的字符表示,但是也有一定的问题:不符合国际标准。因此,在1995年就推出了更完善的编码集:GBK,全称是《汉字内码扩展规范》。该编码集向下兼容GB2312,向上支持国际ISO标准。而且收录了 21003 个汉字,支持全部中日韩汉字。
上面介绍的 GB2313 和 GBK 都是比较完备的编码集,但是不管怎么完备,都只是本地化的编码。也就是说,这个编码在中国使用是没有问题的,但如果跨国使用就有问题。什么意思呢?举个例子:比如我们开发了一个中文网站,这时候外国友人访问了这个网站,如果他们本地没有安装 GBK 或者 GB2312 编码的话,这个网页在他们电脑里面去显示的话就是乱码的。
所以这个时候,我们不仅要有本地化的编码,还要有一个全球的规范。这个规范就是:Unicode 字符集,Unicode又称为:统一码、万国码、单一码,也就是说 Unicode 可以表达全世界所有的语言。它定义了世界通用的符号集,使用 UTF-* 实现了编码(如UTF-8、UTF-16)。其中UTF-8是最为通用的全球编码方式,它以字节为单位对Unicode进行编码。