这是一个异常经典的问题
首先,我们要明白,GB2312、GBK和UTF-8都是一种字符编码,除此之外,还有好多字符编码。只是对于我们中国人的网站来说,用这三种编码比较多。简单的说一下,为什么要用编码,在计算机内,储存文本信息用ASCII码,每一个字符对应着唯一的ASCII码。最初计算机是由美国发明的,他们也用的是键盘和上面的字母,所以他们的字符ASCII好解决。但是我们中国 的就不同了,每个汉字要对应唯一的ASCII码。这样,就出来了国家制定的字符编码标准:GB2312、GBK等。其他国家,其他语言也有他们对应的编码标准。
GB 就是国标的意思,GB2312和GBK主要用于汉字的编码,而UTF-8是全世界通用的。意思就是说,如果你的网页主要面对使用汉语的中国人的话,使用 GB2312和GBK非常好,文字储存体积要小,有一些优点。如果你的网页要面向世界的话,你再用GB2312和GBK作为网页编码的话,有些电脑上的浏 览器没有这种编码,你的网页汉字内容就会变成无法识别的乱码。
它们通常用在网页的meta标签内,例如:<metahttp-equiv=”Content-Type” content=”text/html; charset=gb2312″ />,表示这个页面使用的是GB2312编码。这个信息是给浏览器看的,浏览器会优先考虑使用从网页头部提取出来的编码信息对网页进行解码。当然, 我们也可以强制浏览器使用某种编码解释网页,这样我们就看到了传说中的乱码。
百度首页使用的是GB2312编码,我们可以看到现在是正常的。我们右击页面,选择“编码”->“其他”->“Unicode(UTF-8)”,意思就是强制浏览器使用UTF-8的编码方式解析页面,我们可以看到奇迹发生了。
百度页面上所有的汉字都变成了乱码。如果你的网页使用了GB2312编码,却被一台没有GB2312编码的电脑访问了,里面所有的汉字都成了乱码。如果你使用UTF-8编码,在没有汉字的电脑里,仍然可以正常显示,因为UTF-8是通用的编码,所有电脑都有。微软默认给我们的就是UTF-8。
所以,在编写网页时,尽量使用UTF-8编码。
Ascii(American Standard Code for Information Interchange,美国标准信息交换码)是一套基于拉丁字母的编码系统。用于显示现代英语。是现在最通用的单字节编码。 采用 7位表示。因此显示的字符数量128个。不能完全表示所有的西方字符,就使用第八位,称之为扩展ascii码(EASCII,Extended ASCii),共 256个字符。
Gb2312,当表示中文时,8位的编码已经不能满足所有的字符了。因此就需要改进,一个典型的方案是,在兼容ascii的基础上,取消了扩展部分,当使用2个大于127的编码在一起时,就表示一个汉字了(0xA1-0xF7)(0xA1-0xFE),大于可以保存不到8000个汉字字符。这种编码方式就是 gb2312字符集,中国国家标准简体中文字符集。2312是标准号。
Gbk,可以预见,不到8000个字符,是不足以表示所有的中文字符的(某些不常用汉字,港台地区的繁体字,亚洲其他文字字符等)。因此微软,在gb2312的基础上,将没有用到的编码部分做了扩展编码,就是GBK,始用于win95,到现在(但是不是国家标准)。
Unicode,如果需要完成多语言应用,那么仅仅的中文(东亚)字符是不够的,就会出现,不同的地区国家,使用不同的编码字符集。一旦相互使用,则会出现解码失败(乱码)的情况。如果可以将世界上所有的字符都汇总,然后统一编码,就解决了问题。因此unicode来啦。采用4个字节来保存编码,可以保存的字符数很多,目前已经有效的有十万以上的字符了。
平时所说的 utf-8与unicode是啥关系呢?Utf8是unicode的一种优化的实现。针对不同的字符,所采取的编码长度的不一样的。例如中文就是3个字节,英文是一个字节,一些扩展字符是2个字节。可以通过组成当前字符的第一个字节的大小来判断 大于等于224则是三个字节表示,大于等于192则是两个字节的字符,否则就是一个字节的字符。