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

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

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

UTF-8:UnicodeTransformation 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。

     1、GB2312是GBK的子集,GBK是GB18030的子集; 2、GBK是包括中日韩字符的大字符集合;  3、如果是中文的网站 推荐GB2312 GBK有时还是有点问题;  4为了避免所有乱码问题,应该采用UTF-8,将来要支持国际化也非常方便; 5、UTF-8可以看作是大字符集,它包含了大部分文字的编码。

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

     1、gb2312是简体中文的码; 2、gbk支持简体中文及繁体中文;3、big5支持繁体中文; 4、utf-8支持几乎所有字符;

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

     1、最早制定的汉字编码是GB2312,包括6763个汉字和682个其它符号; 2、95年重新修订了编码,命名GBK1.0,共收录了21886个符号;  3、之后又推出了GBK18030编码,共收录了27484个汉字,同时还收录了藏文、蒙文、维吾尔文等主要的少数民族文字;3.1、现在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编码文件都不能正常的处理,还有很长的路要走。

GB2312、GBK与UTF-8的区别相关推荐

  1. ASCII, GB2312, GBK, Unicode, UTF8之间的区别和联系

    原文链接:https://zhuanlan.zhihu.com/p/258345888 感谢原作者的分享~本博客仅仅是为了做笔记 计算机是美国人发明的, 早期在处理文字方面, 美国人很自然地只考虑处理 ...

  2. ASCII,unicode, utf8 ,big5 ,gb2312,gbk,gb18030等几种常用编码区别

    ASCII,unicode, utf8 ,big5 ,gb2312,gbk,gb18030等几种常用编码区别 最近老为编码问题而烦燥,下定决心一定要将其弄明白!本文主要总 结网上一些朋友提供的 asc ...

  3. 字符集、字符编码、国际化、本地化简要总结(UNICODE/UTF/ASCII/GB2312/GBK/GB18030)

    PS:要转载请注明出处,本人版权所有. PS: 这个只是基于<我自己>的理解, 如果和你的原则及想法相冲突,请谅解,勿喷. 环境说明   普通的linux 和 普通的windows.    ...

  4. GB2312, GBK, GB18030 这几种字符集主要的区别

    转载自:http://www.zhihu.com/question/19677619 1 GB2312-80 GB 2312 或 GB 2312-80 是中国国家标准简体中文字符集,全称<信息交 ...

  5. utf-8 GB2312 GBK三者之间的区别

    各个国家和地区所制定的不同 ANSI 编码标准中,都只规定了各自语言所需的"字符".比如:汉字标准(GB2312)中没有规定韩国语字符怎样存储.这些 ANSI 编码标准所规定的内容 ...

  6. 关于编码ansi、GB2312、unicode与utf-8的区别

     关于编码ansi.GB2312.unicode与utf-8的区别 2014-01-25 08:51 529人阅读 评论(0) 收藏 举报 本文章已收录于: 关于编码ansi.GB2312.uni ...

  7. AJPFX解析关于编码ansi、GB2312、unicode与utf-8的区别

    大家平时遇到乱码问题是否有自己的一套解决方案?这篇文章就是介绍一下常用的编码方式 关于编码ansi.GB2312.unicode与utf-8的区别 先做一个小小的试验: 在一个文件夹里,把一个txt文 ...

  8. 编码标准-GB2312 GBK GB18030

    关于 ASCII编码 可以查看我的另外一篇博客 编码标准-ASCII 关于 Unicode 可以参考我的另外一篇博客 Unicode 编码标准-GB2312 GBK GB18030 基本概念 区位码 ...

  9. 大端小端,ascii,unicode,utf8,utf16,utf32,gb2312,gbk,gb18030等字符编码问题

    字符编码的问题让我困惑了好久的一段时间,其实简单的想,字符编码没有什么东西的,可是想真弄明白还是花去了我一点时间,前端时间写了一个简单的log程序,主要的工作就是支持系统运行时输出日志信息,同时允许定 ...

  10. 计算机网络-字符编码的由来(为什么会有乱码,ASCII、Unicode、GBK和UTF-8字符编码区别)

    为什么我们在网络中传输数据,需要指定字符编码,例如使用UTF-8.GBK等编码.那么字符编码到底是什么?以前我也很困惑这个问题,但是学习了计算机网络后我们知道,由于底层电路的设计本质,只能是识别0和1 ...

最新文章

  1. myeclipse中git的使用
  2. C语言 找数码是否存在
  3. 云计算学习(3-3)云计算的由来-应运而生
  4. C#_细说Cookie_Json Helper_Cookies封装
  5. 微软算法面试题(2)
  6. c语言里 如何取得线程的lpparameter'参数,请问线程函数如何访问对话框类中的变量...
  7. html 标签内背景图片自适应 div 大小
  8. 获取项目根路径,并在其下创建一个名称为userData 的目录。
  9. c#字符相似度对比通用类
  10. JAVA字符串怎么转换成整数
  11. 《CCNA学习指南:数据中心(640-911)》——1.6 考试要点
  12. python tkinter Checkbutton控件
  13. 大数据怎样帮助运维工程师实现无死角监控?
  14. sql数据类型_SQL数据类型
  15. 通过高速计算机网络和多媒体,全国2014.10办公自动化原理及应用试题
  16. Windows / VS下不同类型变量转换
  17. ILSpy反编译工具之C#反汇编
  18. no such file or directory, open
  19. 计算机课导入语,信息技术课的提问和导入技巧
  20. 如何更改linux下的Apache端口号

热门文章

  1. 运行jar应用程序引用其他jar包的四种方法
  2. oracle之to_date函数
  3. unix mysql_Unix和Mysql中列出的数据库大小之间存在差异
  4. 执行Shell脚本的4种方法
  5. Docker源码编译(二)
  6. 如何将网页保存为图片_如何一键保存网页上的所有图片至 iPhone 相册
  7. kpc v0.8.3发布,跨框架的组件库解决方案
  8. python使用阿里云sdk
  9. 【BZOJ】3224: Tyvj 1728 普通平衡树
  10. cefsharp wpf 中文输入问题解决方法