迅速了解编码的发展历程:
ASCII => GB2312 => GBK=>gb18030 => ISO-8859-1(Unicode)(latin-1) => UTF-8(Unicode)
从ASCII码谈起
ASCII码:16384个字符。这就是ANSI字符标准。英文一个字节,中文两个字节。
早期计算机(美国人造的),用ASCII编码(一个字节,8位,可以表示256个编码,实际英语世界里字母、数字和常用符号完全够用)
但是随着计算机的发展,需要更加人性化的编码来适应世界,于是编码的迭代开始了
中国人民通过对 ASCII 编码的中文扩充改造,产生了 GB2312 编码,可以表示6000多个常用汉字。
汉字实在是太多了,包括繁体和各种字符,于是产生了 GBK 编码,它包括了 GB2312 中的编码,同时进行了大量扩充
GBK 是又一个汉字编码标准,全称《汉字内码扩展规范》(GBK),英文名称 Chinese Internal Code Specification
中国的中文编码表升级,融合了更多的中文文字符号。
中国是个多民族国家,各个民族几乎都有自己独立的语言系统,为了表示那些字符,继续把 GBK 编码扩充为 GB18030 编码。
每个国家都像中国一样,把自己的语言编码,于是出现了各种各样的编码,如果你不安装相应的编码,就无法解释相应编码想表达的内容。
最后有个叫 ISO 的组织,他们一起创造了一种编码 Unicode(中英文都占取两个字节),这种编码可以容纳世界上任何一个文字和标志。所以只要电脑上有Unicode这种编码系统,无论是全球哪种文字,只需要保存文件的时候,保存成Unicode编码就可以被其它电脑正常解释。
Unicode 在网络传输中,出现了两个标准 UTF-8 (中文三个字节,英文一个字节)和 UTF-16,分别每次传输 8个位和 16个位。
UTF-8 就是在互联网上使用最广的一种 Unicode 的实现方式, UTF-8 最大的一个特点,就是它是一种变长的编码方式。它可以使用1~4个字节表示一个符号,根据不同的符号而变化字节长度。
你可能有迷惑:
为什么Unicode使用那么广泛,更适应全世界使用,我们的记事本还是用的是ASCII码呢?
ANSI:并不是某一种特定的字符编码。在不同的系统中,ANSI 表示不同的编码,美国的系统中ANSI编码其实是ASCII编码,ASCII 编码不能表示汉字,所以汉字我们可以看到汉字为乱码,而你的系统中 汉字 之所以能够正常显示,ANSI编码其实是GBK编码;而韩文系统中(“한국어”正常显示)ANSI编码其实是EUC-KR编码)
windows 系统通过 Windows code pages 的值来确定当前系统的编码方式(ANSI 只存在于 Windows 系统,不同地区发行的系统,ANSI指代不同)
(根据装的系统编码来决定的)
Unicode:
使用两个字节对世界上几乎所有的语言进行编码
(0x0000-0xFFFF)
Unicode是针对所有计算机的使用者定义一套统一的编码规范,这样计算机使用者就避免了编码转换的问题。
UTF-8(Unicode transfer format -8 ,后面的8代表是以8位二进制为单位来传输符号的)
它 是 Unicode 一种压缩形式,英文 A 在 Unicode 中表示为 0x0041,老外觉得这种存储方式太浪费,因为浪费了 50% 的空间,于是就把英文压缩成 1 个字节,成了 utf8 编码,但是汉字在 utf8 中占 3 个字节,显然用作中文不如 ansi 合算,这就是中国有时候用ansi而不用 UTF8 的原因