字符,字符集,字符编码

字符,字符集,字符编码  简书郭文圣

 

而今Unicode已然一统天下,我怀念许多青春的程序员可能都无撞过编码问题,更不要说了解编码的腾飞了。前数日子在一个老网站上偶尔遭遇乱码,虽然出道时间不短,但针对那个到底吧是不甚了解,好奇心驱使下落入深坑。还吓通过一段时间的跑龙套,边学边写,总算大概理清矣个系统,记录之,分享之。

概念


字符是一个音讯单位,在计算机中,一个华语汉字是一个字符,一个英文字母是一个字符,一个阿拉伯数字是一个字符,一个标点符号也是一个字符。

字符集是字符组成的成团,通常因为二维表的花样是,二维表的内容及尺寸是由使用者的言语而定,是英语,是汉语,还是阿拉伯语。

字符编码是把字符集中的字符编码为特定的次进制数,以便在微机被存储。编码方式一般就是是针对二维表的横纵坐标进行转换的算法。一般还比较简单,直接拿横纵坐标拼一起就做到了。后来乘机字符集的不断扩大,为了节约存储空间,才面世了五光十色的算法。

字符集及字符编码一般都是成为对出现的,如ASCII、IOS-8859-1、GB2312、GBK,都是就表示了字符集又象征了对应的字符编码,以后统称为编码。Unicode比较奇特,具有UCS-4、UTF-8、UTF-16、UTF-32等编码。

发展


单字节

处理器是美国人发明的,人家用的是美式英语,字符比较少,所以同样开始就统筹了一个未杀之二维表,128单字符,取名叫ASCII(American
Standard Code for Information
Interchange)。128单码位,用7个二进制数表示,由于计算机1独字节是8员二向前制数,所以最高位吗0,即00000000-011111110x00-0x7F

发展历史 1

ASCII

新生美国人数发现128个码位不够用,于是当原本二维表的根基及展开了扩大,256只字符,取名叫EASCII(Extended
ASCII)。256只码位,用8位二向前制数表示,即00000000-111111110x00-0xFF

发展历史 2

EASCII

当电脑传至了欧洲,美国丁的正经未适用了,但是改改还能够集合。于是国际规范组织于ASCII的基本功及拓展了扩大,形成了ISO-8859标准,跟EASCII类似,兼容ASCII,在高128只码位上拥有区分。但是由欧洲之语言环境十分复杂,所以冲各国地段的语言又摇身一变了很多子标准,ISO-8859-1、ISO-8859-2、ISO-8859-3、……、ISO-8859-16,真是令人发指。

双字节

当电脑传至了亚洲,尤其是东亚,国际标准被秒杀了,路边小不管说词话,256单码位就不够用了。于是乎继续扩展二维表,单字节改双字节,16各项二前进制数,65536个码位。在不同国家同地域同时冒出了许多编码,大陆的GB2312、港华底BIG5、日本底Shift
JIS等等。

留神65536独码位这种说法就是了不起图景,由于双字节编码可以是变长的,也就是说同一个编码里面有些字符是单字节表示,有些字符是双字节意味着。这样做的益处是,一方面可兼容ASCII,另一方面可以节省存储容量,代价就是是碰头损失有码位。而且编码的宏图呢并无是想象的那么,所有字符从头到尾布满整个二维表,都是有预留空间的。比如说GBK是GB2312的扩充(K竟然是拼音KuoZhan的缩写),按理说都属双字节编码,码位是一样的,根本说不达到扩张,但实则是养空间在由作用。比如下图也GBK的编码空间,GBK/1、GBK/2是GB2312的区域,GBK/3、GBK/4、GBK/5是GBK的区域,红色是用户从定义区域,白色或者就是是由于变长编码损失的区域了。

发展历史 3

GBK

Unicode

当互联网席卷了全世界,地域范围为打破了,不同国家以及地段的计算机在交换数据的进程中,就会见现出乱码的问题,跟语言及的地理隔离差不多。乱码是怎冒出的吧?对同一组二进制数据,不同的编码会解析出不同之字符,用对了编码,解析出的字符组成的仿是有含义之,用擦了编码,解析出的字符组成的文字是从未意义的,也尽管是平常所说之乱码。

透过前的牵线,编码很多,全球的处理器等并未道于一块儿可以的游戏。要彻底解决这个题材,替代原先基于语言的编码系统,就得一个通用的字符集UCS(Universal
Character
Set)和一个通用的字符编码Unicode。一开始UCS用2单字节表示,叫做UCS-2,后来2只字节不敷用,于是便就此4独字节,叫做UCS-4。但是要各级一个字符都用4单字节来表示的话,相较之前的编码会浪费广大储存空间,尤其是相对ASCII等单字节编码会非常吃亏。并且这既略厂商在双许节编码上投入了好老之活力。于是UTF-16不畏给当作同种折中的方案提了出来,既维持了有限许节约不更换,又管了足足的编码空间。而UTF-32凡同UCS-4相对应之,UTF-8尽管如此是因为扩展性比较强,从容应对了UCS-2到UCS-4的反。关于各种UTF的落实细节可以点击链接查看(FQ),已经说得非常懂得了,就非赘述了,但不得不提一下,UTF-16的计划尚充分巧妙的。

UTF(Unicode
Transformation
Format)是将Unicode编码进行转移为字节序列(这吗象征有的ASCLL字节序列用ASCLL码表示与用UTF表示是平等的),通常会以储存空间和频率上进展一定之权,有充分多种贯彻方式,前面提到了UTF-8和UTF-16是极其常用之。这即是事先涉嫌的Unicode的例外之处在。

历史
  • ASCII
    1960 开发
    1963 发布
    1986
    最后一赖创新

  • ISO-8859-1
    1998 发布

  • GB2312
    1980 发布

  • GBK
    1993 发布

  • UCS-2
    In the late
    1980s

  • Unicode
    1987 开发
    1991 发布
    1996
    实现代理体制(UTF-16)
    2015
    最新版8.0

  • UTF-8
    1993 发布
    2008 流行

  • UTF-16
    1996 开发
    2000 发布

基于上述各个编码发展之有的日子节点,再配合下图UTF-8制霸互联网过程,会生一个较清晰的摸底。

发展历史 4

UTF-8

尾声


则Unicode解决了地球上的题目,但是随后三体人入侵而怎么收拾,根据这些上研究编码发展历史来拘禁,比较靠谱的应——还是到再说吧。

 

参考:关于常用之字符集及编码 
   (一个尴尬的故事)

发表评论

电子邮件地址不会被公开。 必填项已用*标注