您好,欢迎来到12图资源库!分享精神,快乐你我!我们只是素材的搬运工!!
  • 首 页
  • 当前位置:首页 > 开发 > WEB开发 >
    作为一个顺序员,你应该知道的编码知识
    时间:2020-03-27 12:23 来源:网络整理 作者:网络 浏览:收藏 挑错 推荐 打印

    作为一个顺序员,你应该知道的编码知识

    在谍战剧里,我们常常看到这样一个桥段,特工人员,千辛万苦拿到一条信息,翻开一看是一串数字,然后赶忙跑到一个秘密中央,拿出一个密码本(也能够是一本唐诗选),按照一定规则(只要本人人知道),比如第一个数字表示页数,第二个数字表示行数,第三个数字表示第几个字,逐一将信息翻译出来。假设这个进程中用了错误的密码本,或许不知道规则,那么将会解码失败。

    计算机的编解码进程跟下面的进程是一样一样的。

    计算机只认 0 和 1 ,一切的影像和字符最终都会转换成计算机可以看法的二进制。一个二进制位(bit)可以表示两种形状 0 和 1 ,一个字节(byte)由八个二进制位组成,所以一个字节一共可以表示256( 2^8 )种形状。假设我们规则每种形状代表一个字符,那么一个字节就可以表达出 256 个字符。

    ASCII

    计算机是由美国人发明的,所以在最后设计编码的时分,就只思索了英文的编码。英文字符很少,加上一些特殊字符,一共也就100个左右,确切的说是128个。这样的话用一个字节停止编码就完全够了,不只够用了,而且还富有出一位,即第一位不断没有参与编码,一致定为 0 。这就是所谓的 ASCII 编码。在 ASCII 编码中,空格 SPACE 是 32 (二进制 00100000 ),大写的字母 A 是 65 (二进制 01000001 )。

    非ASCII

    随着计算机的普及,欧洲也末尾普及计算机,欧洲人发现 ASCII 规则的 128 个字符不能满足他们的运用,比如,在法语中,字母上方有注音符号,就无法用 ASCII 码表示。于是,一些欧洲国度就决议,把字节中闲置的第一位编入新的符号。比如,法语中的 é 的编码为 130 (二进制 10000010 )。这样一来,这些欧洲国度运用的编码体系,最多可以表示 256 个符号。这就是大家常常见到的 ISO-8859-1 编码,也叫 Latin1 编码。

    中文编码

    随着计算机的普及,国人也末尾运用计算机,但是发现按照之前的编码方式,基本就没有汉字什么事儿,也就是计算机基本没办法看法汉字。

    GB2312

    为了可以让计算机看法汉字,我们决议对汉字停止编码,本着敢想敢干的肉体,我们规则用两个字节表示一个汉字。

    详细规则是这样的:一个小于 127 的字节代表的意义与原来的 ASCII 相反,但两个大于 127的字节连在一同时,就表示这是一个汉字,前面的一个字节称为高字节,前面一个字节称为低字节,这样我们就可以组合出 6763 个简体汉字。这就是大家常说的 GB2312 编码。

    GBK

    很显然 GB2312 编码的 6763 个汉字,并不能顺应一切的运用场景,比如“喆”字就不再其中,于是在 GB2312 的基础上又停止了新的扩展,规则只需第一个字节是大于 127 的就OK,至于第二个字节是大于 127 还是小于 127 都无所谓了。经过这样的改动之后,收录的汉字及符号就可以到达 2W 多个,这就是我们常说的 GBK 编码。

    再后来,人们继续对第二个字节停止扩展,开展出了 GB18030 编码,比 GBK 又多出了一些字符编码。

    至此,一切的汉字编码都是用两个字节表示的,但是英文是用一个字节表示。上了一些年岁的顺序员都体验过,一个汉字算两个英文字符的阅历。

    BIG-5

    下面提到的都是简体中文编码,虽然 GBK 及 GB18030 包含了部分繁体字,但是也不片面,于是台湾同胞就发了专门支持繁体字的 Big5 编码,也就是大家常常说的大五码。

    一个小成绩

    不知道大家有没有留意到一个成绩,在单字节编码的时分,关于那些大于 127 小于 256 的编码,在不同的国度代表的字母很能够不一样。比如, 130 在法语编码中代表了 é ,在希伯来语编码中却代表了字母 Gimel (ג) ,在俄语编码中又会代表另一个符号。在汉字的双字节编码中也存在这样的成绩,比如 BIG5 编码跟 GBK 编码都是双字节编码,但是代表的汉字却不一样。

    这就相当于,异样一串二进制数值,A特工组织按照他们的规则解析出来能够是“你好”,而B特工组织按照他们的规则解析出来能够是“滚蛋”。特工组织之间的翻译标准不一样是相当有必要的,但是计算机的编码规则假设各不相反就比较费事了。比如你跟台湾的志玲姐姐聊天,志玲姐姐用 BIG5 编码给你发了一封信,然后你用 GBK 去解码,……,也许就没有然后了。

    Unicode

    为了处置下面的成绩,有个叫 ISO 的国际标准组织,决议保持一切区域性编码,如 BIG5 , GBK 等,重新制定一个新的编码,这个编码集将包含一切字符的编码,这样大家就都一致了,这套编码的英文全称“Universal Multiple-Octet Coded Character Set”,简称UCS, 俗称 “Unicode“。 Unicode 的出现相当于秦始皇对度量衡跟货币停止了一致。

    Unicdoe 按照日常字符的运用频繁度划分了 17 个平面,编号为 0-16 , 0 号平面称为基本多言语平面(Basic Multilingual Plane,简称 BMP ),包含了日常运用最频繁的字符,编码范围从 0000 到 FFFF ,这样该平面可以表示 2^16=65536 个字符;其它平面的编码范围也是从 0000 到 FFFF ,所以其它平面也可以编码 65535 个字符,这样 17 个平面一共可以编码 17×65,536 = 1,114,112 个符号。

    我们最常用的 Unicode 编码运用的是多言语平面的编码,即一切字符都用两个字节停止编码(其它平面能够需求三个或四个字节)。举个例子比如中国的'中'字 Unicode 码是 4E2D ,小写'a'的 Unicode 码是 0061 .

    这外面存在两个成绩,假设一切英文字符都是按照 Unicode 编码,那么会出现糜费存储空间的成绩。明明一个字节可以搞定的事情,偏偏要用两个字节。

    第二个成绩就是计算机如何知道这是 Unicode 编码还是 ASCII 编码,也就是 2 个字节表示的一个字符,还是 2 个字符呢。

    UTF (责任编辑:admin)