码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2019-04-08 18:40:45      阅读:191      评论:0      收藏:0      [点我收藏+]

标签:常用   全球   字符串   nic   tab   vertica   不可   规范   必须   

【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编码就能节省空间

 

字符ASCIIUnicodeUTF-8
A 01000001 00000000 01000001 01000001
x 01001110 00101101 11100100 10111000 10101101

 

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

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

 

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

标签:常用   全球   字符串   nic   tab   vertica   不可   规范   必须   

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

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!