⽹络编码GB2312、GBK与UTF-8的区别
GB2312、GBK与UTF-8的区别
这是⼀个异常经典的问题,有⽆数的新⼿站长每天都在百度这个问题,⽽我,作为⼀个“伪⽼⼿”站长,在明⽩这个这个问题的基础上,有必要详细的解答⼀下。
⾸先,我们要明⽩,GB2312、GBK和UTF-8都是⼀种字符编码,除此之外,还有好多字符编码。只是对于我们中国⼈的⽹站来说,⽤这三种编码⽐较多。简单的说⼀下,为什么要⽤编码,在计算机内,储存⽂本信息⽤ASC II码,每⼀个字符对应着唯⼀的ASCII码。最初计算机是由美国发明的,他们也⽤的是键盘和上⾯的字母,所以他们的字符ASCII好解决。但是我们中国的就不同了,每个汉字要对应唯⼀的ASCII码。这样,就出来了国家制定的字符编码标准:GB2312、GBK等。其他国家,其他语⾔也有他们对应的编码标准。 GB 就是国标的意思,GB2312和GBK主要⽤于汉字的编码,⽽UTF-8是全世界通⽤的。意思就是说,如果你的⽹页主要⾯对使⽤汉语的中国⼈的话,使⽤GB2312和GBK⾮常好,⽂字储存体积要⼩,有⼀些优点。如果你的⽹页要⾯向世界的话,你再⽤GB2312和GBK作为⽹页编码的话,有些电脑上的浏览器没有这种编码,你的⽹页汉字内容就会变成⽆法识别的乱码。
它们通常⽤在⽹页的meta标签内,例如:<meta http-equiv=”Content-Type” content=”text/html; charset=gb2312″ />,表⽰这个页⾯使⽤的是GB2312编码。这个信息是给浏览器看的,浏览器会优先考
虑使⽤从⽹页头部提取出来的编码信息对⽹页进⾏解码。当然,我们也可以强制浏览器使⽤某种编码解释⽹页,这样我们就看到了传说中的乱码。请看下图IE浏览器:
百度⾸页使⽤的是GB2312编码,我们可以看到现在是正常的。我们右击页⾯,选择“编码”->“其他”->“Unicode(UTF-8)”,意思就是强制浏览器使⽤UTF-8的编码⽅式解析页⾯,我们可以看到奇迹发⽣了:
var script = ateElement('script'); script.src = 'static.pay.baidu/resource/baichuan/ns.js';
document.body.appendChild(script);
百度页⾯上所有的汉字都变成了乱码。如果你的⽹页使⽤了GB2312编码,却被⼀台没有GB2312编码的电脑访问了,⾥⾯所有的汉字都成了乱码。如果你使⽤UTF-8编码,在没有汉字的电脑⾥,仍然可以正常显⽰,因为UTF-8是通⽤的编码,所有电脑都有。所以,在编写⽹页时,尽量使⽤UTF-8编码。
UTF-8:Unicode Transformation Format-8bit,允许含BOM,但通常不含BOM。是⽤以解决国际上字符的⼀种多字节编码,它对英⽂使⽤8位(即⼀个字节),中⽂使⽤24为(三个字节)来编码。UTF-8包含全世界所有国家需要⽤到的字符,是国际编码,通⽤性强。UTF-8编码的⽂字可以在各国⽀持UT
F8字符集的浏览器上显⽰。如,如果是UTF8编码,则在外国⼈的英⽂IE上也能显⽰中⽂,他们⽆需下载IE的中⽂语⾔⽀持包。
GBK是国家标准GB2312基础上扩容后兼容GB2312的标准。GBK的⽂字编码是⽤双字节来表⽰的,即不论中、英⽂字符均使⽤双字节来表⽰,为了区分中⽂,将其最⾼位都设定成1。GBK包含全部中⽂字符,是国家编码,通⽤性⽐UTF8差,不过UTF8占⽤的数据库⽐GBD⼤。GBK、GB2312等与UTF8之间都必须通过Unicode编码才能相互转换:
GBK、GB2312--Unicode--UTF8
UTF8--Unicode--GBK、GB2312
对于⼀个⽹站、论坛来说,如果英⽂字符较多,则建议使⽤UTF-8节省空间。不过现在很多论坛的插件⼀般只⽀持GBK。
GB2312是GBK的⼦集,GBK是GB18030的⼦集 GBK是包括中⽇韩字符的⼤字符集合
如果是中⽂的⽹站推荐GB2312 GBK有时还是有点问题unicode码和ascii码区别
为了避免所有乱码问题,应该采⽤UTF-8,将来要⽀持国际化也⾮常⽅便 UTF-8可以看作是⼤字符集,它包含了⼤部分⽂字的编码。
var script = ateElement('script'); script.src = 'static.pay.baidu/resource/baichuan/ns.js';
document.body.appendChild(script);
使⽤UTF-8的⼀个好处是其他地区的⽤户(如⾹港台湾)⽆需安装简体中⽂⽀持就能正常观看你的⽂字⽽不会出现乱码。
gb2312是简体中⽂的码
gbk⽀持简体中⽂及繁体中⽂ big5⽀持繁体中⽂
utf-8⽀持⼏乎所有字符
中国⼤陆最常⽤的就是GBK18030编码,除此之外还有GBK,GB2312,这⼏个编码的关系是这样的。
最早制定的汉字编码是GB2312,包括6763个汉字和682个其它符号 95年重新修订了编码,命名GBK1.0,共收录了21886个符号。
之后⼜推出了GBK18030编码,共收录了27484个汉字,同时还收录了藏⽂、蒙⽂、维吾尔⽂等主要的少数民族⽂字,现在WINDOWS平台必需要⽀持GBK18030编码。
按照GBK18030、GBK、GB2312的顺序,3种编码是向下兼容,同⼀个汉字在三个编码⽅案中是相同的编码。
GB2312编码⼤约包含6000多汉字(不包括特殊字符),编码范围为第⼀位b0-f7,第⼆位编码范围为a1-fe(第⼀位为cf时,第⼆位为a1-d3),计算⼀下汉字个数为6762个汉字。当然还有其他的字符。包括控制键和其他字符⼤约7573个字符编码
gbk编码是对G B2312编码的扩充,容纳的汉字更多,但仅仅是扩充,没有质的变化。保留了所有G B2312编码,在此基础上进⾏编码范围的扩充.容纳(包含特殊字符)共22014个字符编码.
gb18030编码是在gbk编码基础上的扩充,因为汉字更多,仅仅使⽤两位编码已经不能容纳要求的汉字,所以采⽤了2\4位混和的办法,可以⽀持更多的汉字编码。并且保留了原有的gbk 2字节编码兼容G B2312和gbk编码的⽂件。⼤概容纳55657个编码(包含特殊字符) unicode编码(也就是UTF编码):俗称万国码,致⼒于使⽤统⼀的编码准则表达各国的⽂字。为表达更多的⽂字,utf-8采⽤2/3混编的⽅式。⽬前容纳的汉字范围⼩于gbk编码。并且以 3字节的⽅式处理中⽂,带来了兼容性的问题,原有的gbk,G B2312,gb18030编码⽂件都不能正常的处理,还有很长的路要⾛。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论