文档章节

GB2312、GBK与UTF-8的区别

浮躁的码农
 浮躁的码农
发布于 2015/07/09 14:56
字数 1760
阅读 38
收藏 0

这是一个异常经典的问题,有无数的新手站长每天都在百度这个问题,而我,作为一个伪老手站长,在明白这个这个问题的基础上,有必要详细的解答一下。

首先,我们要明白,GB2312GBKUTF-8都是一种字符编码,除此之外,还有好多字符编码。只是对于我们中国人的网站来说,用这三种编码 比较多。简单的说一下,为什么要用编码,在计算机内,储存文本信息用ASC II码,每一个字符对应着唯一的ASCII码。最初计算机是由美国发明的,他们也用的是键盘和上面的字母,所以他们的字符ASCII好解决。但是我们中国 的就不同了,每个汉字要对应唯一的ASCII码。这样,就出来了国家制定的字符编码标准:GB2312GBK等。其他国家,其他语言也有他们对应的编码 标准。

GB 就是国标的意思,GB2312GBK主要用于汉字的编码,而UTF-8是全世界通用的。意思就是说,如果你的网页主要面对使用汉语的中国人的话,使用 GB2312GBK非常好,文字储存体积要小,有一些优点。如果你的网页要面向世界的话,你再用GB2312GBK作为网页编码的话,有些电脑上的浏 览器没有这种编码,你的网页汉字内容就会变成无法识别的乱码。

它们通常用在网页的meta标签内,例如:<meta http-equiv=”Content-Type” content=”text/html; charset=gb2312″ />,表示这个页面使用的是GB2312编码。这个信息是给浏览器看的,浏览器会优先考虑使用从网页头部提取出来的编码信息对网页进行解码。当然, 我们也可以强制浏览器使用某种编码解释网页,这样我们就看到了传说中的乱码。请看下图IE浏览器:

百度首页使用的是GB2312编码,我们可以看到现在是正常的。我们右击页面,选择编码”->“其他”->“UnicodeUTF-8)”,意思就是强制浏览器使用UTF-8的编码方式解析页面,我们可以看到奇迹发生了:

百度页面上所有的汉字都变成了乱码。如果你的网页使用了GB2312编码,却被一台没有GB2312编码的电脑访问了,里面所有的汉字都成了乱码。如果你使用UTF-8编码,在没有汉字的电脑里,仍然可以正常显示,因为UTF-8是通用的编码,所有电脑都有。

所以,在编写网页时,尽量使用UTF-8编码。

 

 

UTF-8Unicode Transformation Format-8bit,允许含BOM,但通常不含BOM。是用以解决国际上字符的一种多字节编码,它对英文使用8位(即一个字节),中文使用24为(三个字节)来编码。UTF-8包含全世界所有国家需要用到的字符,是国际编码,通用性强。UTF-8编码的文字可以在各国支持UTF8字符集的浏览器上显示。如,如果是UTF8编码,则在外国人的英文IE上也能显示中文,他们无需下载IE的中文语言支持包。

 

GBK是国家标准GB2312基础上扩容后兼容GB2312的标准。GBK的文字编码是用双字节来表示的,即不论中、英文字符均使用双字节来表示,为了区分中文,将其最高位都设定成1GBK包含全部中文字符,是国家编码,通用性比UTF8差,不过UTF8占用的数据库比GBD大。

 

GBKGB2312等与UTF8之间都必须通过Unicode编码才能相互转换:

 

GBKGB2312--Unicode--UTF8

 

UTF8--Unicode--GBKGB2312

 

对于一个网站、论坛来说,如果英文字符较多,则建议使用UTF8节省空间。不过现在很多论坛的插件一般只支持GBK

 

 

GB2312GBK的子集,GBKGB18030的子集

GBK是包括中日韩字符的大字符集合

如果是中文的网站 推荐GB2312 GBK有时还是有点问题

为了避免所有乱码问题,应该采用UTF-8,将来要支持国际化也非常方便

UTF-8可以看作是大字符集,它包含了大部分文字的编码。

使用UTF-8的一个好处是其他地区的用户(如香港台湾)无需安装简体中文支持就能正常观看你的文字而不会出现乱码。

 

 

gb2312是简体中文的码

gbk支持简体中文及繁体中文

big5支持繁体中文

utf-8支持几乎所有字符

 

 

中国大陆最常用的就是GBK18030编码,除此之外还有GBKGB2312,这几个编码的关系是这样的。

最早制定的汉字编码是GB2312,包括6763个汉字和682个其它符号

95年重新修订了编码,命名GBK1.0,共收录了21886个符号。

之后又推出了GBK18030编码,共收录了27484个汉字,同时还收录了藏文、蒙文、维吾尔文等主要的少数民族文字,现在WINDOWS平台必需要支持GBK18030编码。

      

按照GBK18030GBKGB2312的顺序,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 B2312gbk编码的文件。大概容纳55657个编码(包含特殊字符)

unicode编码(也就是UTF编码):俗称万国码,致力于使用统一的编码准则表达各国的文字。

为表达更多的文字,utf-8采用2/3混编的方式。目前容纳的汉字范围小于gbk编码。并且以

3字节的方式处理中文,带来了兼容性的问题,原有的gbk,G B2312,gb18030编码文件都不能正常的处理,还有很长的路要走。


© 著作权归作者所有

共有 人打赏支持
上一篇: HTTP请求原理介绍
下一篇: 编码总览
浮躁的码农

浮躁的码农

粉丝 71
博文 850
码字总数 154227
作品 0
松江
程序员
私信 提问
GBK与UTF-8的区别

GBK的文字编码是双字节来表示的,即不论中、英文字符均使用双字节来表示,只不过为区分中文,将其最高位都定成1。 至于UTF-8编码则是用以解决国际上字符的一种多字节编码,它对英文使用8位(...

长平狐
2012/09/06
99
0
GBK和UTF8的区别

我们这里将以最简单最容易理解的方式来描述GBK和UTF8的区别,以及它们分别是什么。 GBK编码:是指中国的中文字符,其它它包含了简体中文与繁体中文字符,另外还有一种字符“gb2312”,这种字...

阿_呆
2015/09/07
55
0
new String(str.getBytes("iso8859-1"), "UTF-8");

1.编码基础知识 最早的编码是iso8859-1,和ascii编码相似。但为了方便表示各种各样的语言,逐渐出现了很多标准编码,重要的有如下几个。 1.1. iso8859-1 通常叫做Latin-1 属于单字节编码,最...

八戒_o
2015/11/09
0
0
utf-8、unicode、gbk、gb2312、ANSI编码的区别

utf-8、unicode、gbk、gb2312编码的区别 utf-8 先来看看百度的解释: 一种针对Unicode的可变长度字符编码,又称万国码。现在已经标准化为RFC 3629。UTF-8用1到6个字节编码Unicode字符。用在网...

code_ac
2017/05/08
0
0
Python的ASCII, GB2312, Unicode , UTF-8区别

ASCII 是一种字符集,包括大小写的英文字母、数字、控制字符等,它用一个字节表示,范围是 0-127 Unicode分为UTF-8和UTF-16。UTF-8变长度的,最多 6 个字节,小于 127 的字符用一个字节表示,...

长平狐
2013/01/06
813
0

没有更多内容

加载失败,请刷新页面

加载更多

再谈使用开源软件搭建数据分析平台

三年前,我写了这篇博客使用开源软件快速搭建数据分析平台, 当时收到了许多的反馈,有50个点赞和300+的收藏。到现在我还能收到一些关于dataplay2的问题。在过去的三年,开源社区和新技术的发...

naughty
今天
3
0
C++网络编程(一)gRPC的编译

Google是真滴烦,整个编译链全是自家产品,在编译之前先来安装一堆东西 安装环境依赖 chocolatey Windows下的包管理系统,没有他就慢慢去下载下面的一堆乱七八糟的东西吧。CMD下执行下面这句...

Pulsar-V
今天
3
0
Python3的日期和时间

python 中处理日期时间数据通常使用datetime和time库 因为这两个库中的一些功能有些重复,所以,首先我们来比较一下这两个库的区别,这可以帮助我们在适当的情况下时候合适的库。 在Python文...

编程老陆
今天
2
0
分布式面试整理

并发和并行 并行是两个任务同时进行,而并发呢,则是一会做一个任务一会又切换做另一个任务。 临界区 临界区用来表示一种公共资源或者说是共享数据,可以被多个线程使用,但是每一次,只能有...

群星纪元
今天
3
0
手机通过wifi遥控arduino

手机下载Blinker 从Blinker官网下载手机App,安装到手机。 手机连接WiFi。 点击我的设备右上角的"+"添加设备,选择Arduino -> wifi接入,复制密钥以备后续使用。 点击新建的设备,可以在新界...

davidwbnu
昨天
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部