世界上存在着多种编码方式,同一个二进制数字可以被解释成不同的符号。因此,要想打开一个文本文件,就必须知道它的编码方式,否则用错误的编码方式解读,就会出现乱码。
- ASCII,是American Standard Code for Information Interchange缩写,即“美国信息交换标准码”。这是美国早期制定的编码规范,一个ASCII码占一个字节,不过只用到前七位来表示字符,最高位为校验位,所以只能表示128个字符,包括英文字符、阿拉伯数字、西文字符以及32个控制字符。
- 本着能薅羊毛就使劲薅的科学专研精神,业界把一个字节的八位都用来表示字符了,所以向ASCII表继续扩充到256个符号,这样就可以存储一些英文的制表符、部分音标字符等等的一些其它符号。
- 计算机进入中国之后,我们发现洋人的东西好是好,但是不适合国情,啥都白搭。ASCII码撑死也就256个字符,还不够一本千字文用的。所以勤劳的中国人民对 ASCII 编码进行了中文扩充改造,产生了 GB2312 编码,每个字占据2bytes,可以表示6000多个常用汉字。
- 由于GB2312只有6763个汉字,而中华文明文化底蕴深不可测,汉字实在是太多,各种繁体和字符,GB2312 编码完全不都塞牙缝的。于是便产生了 GBK 编码,它包括了 GB2312 中的编码,同时扩充了很多。经过GBK编码后,可以表示的汉字达到了20902个,另有984个汉语标点符号、部首等。值得注意的是这20902个汉字还包含了繁体字。
- 需要明确的是,中国的文字不仅仅是汉字,有包括许多少许民族的文字符号。显然只有2万个符号容量的GBK编码还是满足不了我们,因此我们又把 GBK 编码继续修改,扩充为 GB18030 编码。GB18030多出来的汉字使用4bytes编码,GB18030编码的中文文件已经有七万多个汉字了,包含了多种少数民族文字。
- GB18030编码基本可以解决国内字符编码问题,然后新问题来了,现在是地球村时代了,大家都是要互联交流的,但是全世界有各种各样的编码,如果你不安装相应的编码,就无法解释相应编码想表达的内容。为了解决编码混乱的问题,某个神秘的国际组织创造了UNICODE ,这种编码非常大,大到可以容纳世界上任何一个文字和标志。所以只要电脑上有 UNICODE 这种编码系统,无论是全球哪种文字,只需要保存文件的时候,保存成 UNICODE 编码就可以被其他电脑正常解释。
- UNICODE虽然解决了各自为战的问题,但是美国人不愿意了,因为美国原来的ASCII只需要一个字节就可以了。UNICODE编码却让他们的语言多了一个字节,白白浪费一个字节的存储空间。经过协商,出现了一种新的转换格式,被称为通用转换格式,也就是UTF(unicode transformation format).常见的有utf-8,utf-16。utf-8规定,先分类,美国字符一个字节,欧洲两个字符,东南亚三个字符。