网络编码 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 = document.createElement(‘script‘); script.src = ‘http://static.pay.baidu.com/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编码的文字可以在各国支持UTF8字符集的浏览器上显示。如,如果是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有时还是有点问题

为了避免所有乱码问题,应该采用UTF-8,将来要支持国际化也非常方便  UTF-8可以看作是大字符集,它包含了大部分文字的编码。

var script = document.createElement(‘script‘); script.src = ‘http://static.pay.baidu.com/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编码文件都不能正常的处理,还有很长的路要走。

时间: 2024-10-07 23:29:53

网络编码 GB2312、GBK与UTF-8的区别的相关文章

GBK和UTF8有什么区别

GBK编码:是指中国的中文字符,其它它包含了简体中文与繁体中文字符,另外还有一种字符“gb2312”,这种字符仅能存储简体中文字符. UTF-8编码:它是一种全国家通过的一种编码,如果你的网站涉及到多个国家的语言,那么建议你选择UTF-8编码. GBK和UTF8有什么区别? UTF8编码格式很强大,支持所有国家的语言,正是因为它的强大,才会导致它占用的空间大小要比GBK大,对于网站打开速度而言,也是有一定影响的. GBK编码格式,它的功能少,仅限于中文字符,当然它所占用的空间大小会随着它的功能而

UTF8转换为GB编码gb2312转换为utf-8

这个方法是用windows的字符集转换的,跟sybase 的unicode码表可能在某些符号上有差别,对于大部分字符来说,尤其是 汉字,应该不会有问题的,如果要求比较高的话,可以买sybase的 unicode开发包,:P [code] #include <stdio.h> #include <stdlib.h> #include <string.h> #include <locale.h> #include <ctype.h> #include

【转】ubuntu 编码 UTF-8 GBK GB18030

添加编码支持 sudo locale-gen zh_CN.GBK sudo locale-gen zh_CN.GB2312 sudo locale-gen zh_CN.GB18030 2.更新一下locale: sudo dpkg-reconfigure locales sudo locale-gen 如果出现类似于 zh_CN.GB18030...Done 之类的对应提示说明相关内码已安装成功 //////////////////////////////////////////////////

GB2312,GBK,GB18030,UTF8四种汉字编码标准有什么区别和联系

 从GB2312.GBK 到 GB18030,这些编码方法是向下兼容的,即同一个字符在这些方案中总是有相同的编码,后面的标准支持更多的字符.在这些编码中,英文和中文可以统一地处理.区分中文编码的方法是高字节的最高位不为 0.按照程序员的称呼,GB2312.GBK 到 GB18030 都属于双字节字符集 (DBCS). 以下是这四种字符集的包含关系:GB2312 < GBK < GB18030 < UTF8 ---------------------------------------

转载--改变ubuntu默认编码为GBK

在Ubuntu支持中文后(方法见上篇文章),默认是UTF-8编码,而Windows中文版默认是GBK编码.为了一致性,通常要把Ubuntu的默认编码改为GBK.当然你也可以不改,但这会导致我们在两个系统之间共享文件变得非常不方便,Samba共享的文件也总会有乱码出现.总不能每次传完文件都人肉转码一次吧. ubuntu转码需要分为几个部分分别进行: 1)让Ubuntu支持GBK Ubuntu默认是不支持GBK的.这里若不更改,则后续步骤均无法生效. a) 修改配置文件# vi /var/lib/l

网络编码(Network Encoding)与多径路由(Multi-path routing)

传统的网络编码研究在以一个简单的例子阐述网络编码方案可以比传统的单路径多传输1.5比特.虽然要了解网络编码的现有研究成果需要概率论.信息论.图论等方面的知识,但感觉似乎这些还没有达到实用程度? 下面几个问题如何解决: 1.如何不知道网络拓扑的情况下"探测"之,并应用一个最佳的网络编码方案? 2.网络编码仅目前提出的那几种方案吗? 3.多源传输信道有何实际意义?既然"多源",这些源之间如何保证一致性和同步?难道应用量子纠缠的特性吗? 如果不考虑编码性能的最优,倒是可以

centos批改默认字符编码为GBK

centos修改默认字符编码为GBK(服务器端java GBK字符乱码) 1.查看系统默认编码 命令:echo $LANG en_US.UTF-8 命令 : locale LANG=en_US.UTF-8 LC_CTYPE="en_US.UTF-8" LC_NUMERIC="en_US.UTF-8" LC_TIME="en_US.UTF-8" LC_COLLATE="en_US.UTF-8" LC_MONETARY="

网络编码

网络编码(Network Coding): 传统的通信网络传送数据的方式是存储转发,即除了数据的发送节点和接收节点以外的节点只负责路由,而不对数据内容做任何处理,中间节点扮演着转发器的角色.长期以来,人们普遍认为在中间节点上对传输的数据进行加工不会产生任何收益,然而R Ahlswede等人[1]于2000年提出的网络编码理论彻底推翻了这种传统观点. 网络编码是一种融合了路由和编码的信息交换技术,它的核心思想是在网络中的各个节点上对各条信道上收到的信息进行线性或者非线性的处理,然后转发给下游节点,

网络编码概述

网络编码概述  网络编码,是指一种融合了路由和编码的信息交换技术,其核心思想,是在网络中的各个节点上,对各条信道上收到的信息进行线性或者非线性的处理,然后转发给下游节点,中间节点扮演着编码器或信号处理器的角色.网络编码已经被证明可以极大地提高网络的吞吐量和可靠性,可以分为流内网络编码与流间网络编码两类.其中,流间网络编码是指网络节点将不同的数据包编码进行收集和整理组合,之后通过广播的形式发送出去,从而有效提高数据包单次传输时的信息量,减少信息的传输次数,从而提高网络吞吐量:流内网络编码是指网络节