关于编码的发展演变:ASCII、GB2312、GBK、gb18030、Unicode、UTF-8

【1】ASCII 每个字符占据1bytes(字节),第一次以规范标准发表是在1967年,最后一次修订是在1986年。用二进制表示的话最高位必须为0(扩展的ASCII不在考虑范围内),因此ASCII只能表示128个字

【2】GB2312 最早一版的中文编码(1980年),每个字占据2bytes。由于要和ASCII兼容,那这2bytes最高位不可以为0了(否则和ASCII会有冲突)。在GB2312中收录了6763个汉字以及682个特殊符号,已经囊括了生活中最常用的所有汉字。

【3】GBK 由于GB2312只有6763个汉字,汉语博大精深,怎么够?于是GBK中在保证不和GB2312、ASCII冲突(即兼容GB2312和ASCII)的前提下,也用每个字占据2bytes的方式又编码了许多汉字。经过GBK编码后,可以表示的汉字达到了20902个,另有984个汉语标点符号、部首等。值得注意的是这20902个汉字还包含了繁体字。

【4】GB18030 然而,GBK的两万多字也已经无法满足我们的需求了,还有更多可能你自己从来没见过的汉字需要编码。这时候显然只用2bytes表示一个字已经不够用了(2bytes最多只有65536种组合,然而为了和ASCII兼容,最高位不能为0就已经直接淘汰了一半的组合,只剩下3万多种组合无法满足全部汉字要求)。

因此GB18030多出来的汉字使用4bytes编码。当然,为了兼容GBK,这个四字节的前两位显然不能与GBK冲突(实操中发现后两位也并没有和GBK冲突)。我国在2000年和2005年分别颁布的两次GB18030编码,其中2005年的是在2000年基础上进一步补充。至此,GB18030编码的中文文件已经有七万多个汉字了,甚至包含了部分少数民族文字。由于全球200多个国家和地区,加上每个国家的差异,如果都占据一个表,那解码就太尴尬了。

【5】Unicode 万国码,统一码,1994年正式发布,以2bytes将各个国家的编码整合在一起,没有改变编码位置,所以Unicode是可以向下兼容GBK、GB2312的。但是由于原本ASCII码是用1bytes的,很多使用ASCII码的,如果采用这种方式编码,体积将变大一倍,造成资源浪费于是有了UTF-8。

【6】UTF-8,是Unicode码的压缩,重排。ASCII码部分仍旧使用1字节,汉字等使用3字节。如果你要传输的文本包含大量英文字符,用UTF-8编码就能节省空间

字符 ASCII Unicode UTF-8
A 01000001 00000000 01000001 01000001
x 01001110 00101101 11100100 10111000 10101101

微软默认的中文编码就是GBK,

1 print u"我爱拍森!"
2 #前面加个u,就可以将中文字符串,转换为Unicode,可以向下兼容GBK,因此不会乱码,主要是Python2下

原文地址:https://www.cnblogs.com/helloearthlings/p/10672383.html

时间: 2024-11-09 03:40:19

关于编码的发展演变:ASCII、GB2312、GBK、gb18030、Unicode、UTF-8的相关文章

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

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

ASCII、GBK、unicode、utf-8、iso-8859-1等编码的发展史和相互关系

1.ASCII 很久很久以前,有一群人,他们决定用8个可以开合的晶体管来组合成不同的状态,以表示世界上的万物.他们认为8个开关状态作为原子单位很好,于是他们把这称为"字节". 再后来,他们又做了一些可以处理这些字节的机器,机器开动了,可以用字节来组合出更多的状态,状态开始变来变去.他们看到这样是好的,于是它们就这机器称为"计算机". 开始计算机只在美国用.八位的字节一共可以组合出256(2的8次方)种不同的状态. 他们把其中的编号从0开始的32种状态分别规定了特殊的

编码方式ASCII、GBK、Unicode、UTF-8比较

心情: 写代码经常遇到中文乱码问题,很烦,一气之下总结了各种编码方式(O`-`O)!! 文章内容深度较浅,详细了解可到下链接:https://blog.csdn.net/QuinnNorris/article/details/78705723; 总结了以下几种编码方式: ASCII.GBK(GB2312.GB18030).Unicode.UTF-8 ASCII American Standard Code for Information Interchange 最早的编码,一个字符一个字节.没有

字符编码的故事(ASCII,ANSI,Unicode,Utf-8区别)转载

http://www.imkevinyang.com/2009/02/字符编解码的故事(ascii,ansi,unicode,utf-8区别).html 很久很久以前,有一群人,他们决定用8个可以开合的晶体管来组合成不同的状态,以表示世界上的万物.他们认为8个开关状态作为原子单位很好,于是他们把这称为"字节". 再后来,他们又做了一些可以处理这些字节的机器,机器开动了,可以用字节来组合出更多的状态,状态开始变来变去.他们看到这样是好的,于是它们就这机器称为"计算机"

汉字编码 (GB2312 GBK GB18030)

GB2312 收录简化汉字及符号.字母.日文假名等共7445个图形字符,其中汉字占6763个 每个符号都用两个字节表示,每个字节均采用七位编码表示,习惯上 第一个字节是高字节,第二个字节是低字节 GB2312的编码范围为2121H-777EH,与ASCII有重叠,通行方法是将GB码两个字节的最高位置1以示区别 GBK 由于GKB收录的汉字较少以及配合UNICODE的实施,GBK 产生了 向下兼容GB2312 双字节表示 GBK共收入21886个汉字和图形符号,包括: GB2312中的全部汉字.非

ASCII、GBK、Unicode和UTF-8字符编码的区别联系

很久很久以前,有一群人,他们决定用8个可以开合的晶体管来组合成不同的状态,以表示世界上的万物.他们看到8个开关状态是好的,于是他们把这称为”字节“.再后来,他们又做了一些可以处理这些字节的机器,机器开动了,可以用字节来组合出很多状态,状态开始变来变去.他们看到这样是好的,于是它们就这机器称为”计算机“. 开始计算机只在美国用.八位的字节一共可以组合出256(2的8次方)种不同的状态. 他们把其中的编号从0开始的32种状态分别规定了特殊的用途,一但终端.打印机遇上约定好的这些字节被传过来时,就要做

编码格式简介:ASCII码、ANSI、GBK、GB2312、GB18030和Unicode、UTF-8,BOM头

编码格式简介:ASCII码.ANSI.GBK.GB2312.GB18030和Unicode.UTF-8,BOM头 二进制: 只有0和1. 十进制.十六进制.八进制: 计算机其实挺笨的,它只认识0101这样的字符串(二进制),当然了我们看这样的01串时肯定会比较头晕的. 所以很多时候为了描述简单都用十进制,十六进制,八进制表示.实际上都是等价的,没啥太多不一样. 位(bit) 计算机中存储一个0,或者一个1的位置空间,叫做位. 字节(byte) 计算机中,我们把连续的8个位空间,叫做一个字节. A

字符编码的发展历程

阶段1: 计算机只认识数字,我们在计算机里一切数据都是以数字来表示,因为英文符号有限 所以在规定使用的字节的最高位是0,每一个字节都是以0~127之间的数字来表示,比如A对应65,a对应97. 这就是美国标准信息交换码-ASCLL. 阶段2: 随着计算机在全球的普及,很多国家和地区都把自己的字符引入了计算机,比如汉字. 此时发现一个字节能表示数字范围太小,不能包含所有的中文汉字,那么就规定使用两个字节来表示一个汉字. 规定:原有的ASCLL字符的编码保持不变仍然使用一个字节表示,为了区别一个中文

常用字符集编码详解:ASCII 、GB2312、GBK、GB18030、UTF-8、unicode

ASCII ASCII码是7位编码,编码范围是0x00-0x7F.ASCII字符集包括英文字母.阿拉伯数字和标点符号等字符.其中0x00-0x20和0x7F共33个控制字符.只支持ASCII码的系统会忽略每个字节的最高位,只认为低7位是有效位.HZ字符编码就是早期为了在只支持7位ASCII系统中传输中文而设计的编码.早期很多邮件系统也只支持ASCII编码,为了传输中文邮件必须使用BASE64或者其他编码方式.GB2312 GB2312是基于区位码设计的,区位码把编码表分为94个区,每个区对应94