热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

GB18030和UTF-8有啥区别

GB18030和UTF-8有啥区别
GB18030和UTF-8有啥区别

回复内容:

GB18030和UTF-8有啥区别

GB18030 是中国的标准,国标(GB),就是如何表示一个字符。Unicode只给出了一个字符的编号,并没有规定如何表示(或者说保存),UTF-8规定了如何表示。所以说,GB18030 unicode+utf-8 是不同的字符表示方式,一个是中国制定的标准,一个是国际上的组织制定的标准。

计算机被发明的时候,人们认为不会像现在这么流行,所以包括控制字符在内人们只定义了包括控制字符在内的128种符号,这就是 ASCII

后来计算机流行到非英语国家,那么他们有自己的语言需要计算机显示。由于ASCII符号只有128个,而计算机一个字节有8位,所以还有128个冗余,于是他们用剩余的128个冗余表示他们自己国家的文字。不同的国家把这128个(其实是95个)定义成不同的字符,分别叫做ISO8859-1(Latin-1),ISO8859-2(Latin-2).....ISO8859-16(Latin-10)。额,中间有一部分不叫 Latin(好坑人呀)

但是在东亚,就说中国吧,128个显然表示不了所有的汉字。所以就只能用两个字节表示一个汉字。于是规定,原始的 ASCII 还是用一个字节表示,使用连续两个字节(这两个字节值都大于128)表示一个汉字。一共可以表示128×128=16384个汉字(实际没有那么多),叫做 GB2312。后来人们发现自己太傻,其实第一个字节大于128的话,我们用连续两个字节表示一个汉字也不会出现歧义,所以规定,如果当前字节小于128那么就是标准的 ASCII,如果当前字节大于128就用当前字节和后面那个字节表示一个汉字,所以可以表示(128×256=32768)个汉字,然后补充了一部分汉字,叫做 GBK。在此基础上又增加了一部分汉字,这个版本叫做 GB18030。(东亚标准里还有BIG5和CJK的故事)。

不同的国家有不同的标准,所以当大家交流的时候就不方便了。所以出现了两个组织(忘记具体叫什么了),开始着手统一全部的字符集(后来其中一个组织觉得另一个组织做就好了,主动退出了),叫做 Unicode。

但是 Unicode 只规定了一个字符的编号,并没有规定具体怎么表示。比如 A 编号65,具体表示的时候可以用一个字节 0x41 表示,可以用两个字节表示 0x00 0x41,或者用四个字节表示 0x00 0x00 0x00 0x41,而且多个字节表示的话还有谁在前的问题。所以在 unicode 表示上出现了不同的标准。UTF-8 就是一种表示的标准(终于说到UTF-8了),不过具体怎么表示就有点儿复杂了,是一种变长编码,有些字符用一个字节(兼容ASCII,这就是为什么UTF-8比较流行)有些用两个有些三个。。。随便百度了一个表示方式,就是把一个如何把一个数字转成几个字节表示。

扩展:还有两种标准 UTF-16,UTF-32,UTF-16统一个用两个字节或是四个字节表示一个字符(java,Javascript里就是这种编码,这其中还有USC定长编码的故事),UTF-32统一用4个字节,所以都不兼容ASCII。既然是多字节,就涉及字节顺序的问题。。。。

非常同意 @zonxin 不过我想说:

珍爱生命,远离GBK/GB2312 (当然有点偏激, 但爷就这么说了!)

当然utf8问题,微软又整出个utf8 with bom 和 utf8 without bom,马 丹啊当个程序员,容易吗!

前者是中文字符集,后者是万国码,完全不同的字符集编码!笔者建议好好了解一下字符编码,可以参考一下这篇文章,字符编码详解

前者是字符集,相当于“都说些啥”,后者是编码方式,相当于“该咋说”。

推荐阅读
  • 如何提高PHP编程技能及推荐高级教程
    本文介绍了如何提高PHP编程技能的方法,推荐了一些高级教程。学习任何一种编程语言都需要长期的坚持和不懈的努力,本文提醒读者要有足够的耐心和时间投入。通过实践操作学习,可以更好地理解和掌握PHP语言的特异性,特别是单引号和双引号的用法。同时,本文也指出了只走马观花看整体而不深入学习的学习方式无法真正掌握这门语言,建议读者要从整体来考虑局部,培养大局观。最后,本文提醒读者完成一个像模像样的网站需要付出更多的努力和实践。 ... [详细]
  • 一次上线事故,30岁+的程序员踩坑经验之谈
    本文主要介绍了一位30岁+的程序员在一次上线事故中踩坑的经验之谈。文章提到了在双十一活动期间,作为一个在线医疗项目,他们进行了优惠折扣活动的升级改造。然而,在上线前的最后一天,由于大量数据请求,导致部分接口出现问题。作者通过部署两台opentsdb来解决问题,但读数据的opentsdb仍然经常假死。作者只能查询最近24小时的数据。这次事故给他带来了很多教训和经验。 ... [详细]
  • 熟练掌握Spring Cloud,终于成为Java工程师的面试门槛 ... [详细]
  • 35岁程序员连续被2家公司裁掉,网友酸了,成功入职成事业编晒出福利
    这篇文章讲述了一个35岁程序员连续被两家公司裁掉的故事,他在遭遇中年危机后成功入职事业单位,并分享了入职后的福利。文章探讨了程序员在互联网行业中的竞争力下降的原因。 ... [详细]
  • 本文详细介绍了云服务器API接口的概念和作用,以及如何使用API接口管理云上资源和开发应用程序。通过创建实例API、调整实例配置API、关闭实例API和退还实例API等功能,可以实现云服务器的创建、配置修改和销毁等操作。对于想要学习云服务器API接口的人来说,本文提供了详细的入门指南和使用方法。如果想进一步了解相关知识或阅读更多相关文章,请关注编程笔记行业资讯频道。 ... [详细]
  • 本文介绍了OC学习笔记中的@property和@synthesize,包括属性的定义和合成的使用方法。通过示例代码详细讲解了@property和@synthesize的作用和用法。 ... [详细]
  • C语言注释工具及快捷键,删除C语言注释工具的实现思路
    本文介绍了C语言中注释的两种方式以及注释的作用,提供了删除C语言注释的工具实现思路,并分享了C语言中注释的快捷键操作方法。 ... [详细]
  • 如何用UE4制作2D游戏文档——计算篇
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了如何用UE4制作2D游戏文档——计算篇相关的知识,希望对你有一定的参考价值。 ... [详细]
  • 本文介绍了Python版Protobuf的安装和使用方法,包括版本选择、编译配置、示例代码等内容。通过学习本教程,您将了解如何在Python中使用Protobuf进行数据序列化和反序列化操作,以及相关的注意事项和技巧。 ... [详细]
  • 本文介绍了一些好用的搜索引擎的替代品,包括网盘搜索工具、百度网盘搜索引擎等。同时还介绍了一些笑话大全、GIF笑话图片、动态图等资源的搜索引擎。此外,还推荐了一些迅雷快传搜索和360云盘资源搜索的网盘搜索引擎。 ... [详细]
  • 本文介绍了2019年上半年内蒙古计算机软考考试的报名通知和考试时间。考试报名时间为3月1日至3月23日,考试时间为2019年5月25日。考试分为高级、中级和初级三个级别,涵盖了多个专业资格。报名采取网上报名和网上缴费的方式进行,报考人员可登录内蒙古人事考试信息网进行报名。详细内容请点击查看。 ... [详细]
  • Ihavefollowingjsonarraywhichisgeneratedatruntime.Hencethenumberofnamedatapairsvarie ... [详细]
  • ImgettingabugwithInternetExplorer.Theiframedoesnthavecorrectsizeanditisdisplayedo ... [详细]
  • 我有这个工厂:collect()并创建了该对象:consttask( ... [详细]
  • 我试图制作一个进度条,如果还有更多内容仍被隐藏,则显示箭头。为了更清楚,我做 ... [详细]
author-avatar
文voci_820
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有