如何找到真正的黑客帮忙,有信誉的黑客联系方式
二进制创造了另一个世界,有一个小男孩,已经醒来。
0×01 编码的故事
ASCII
一个神秘组织为了融入人类的语言符号,将二进制的单元八位一组,建立了一套符号对应关系表(例如 A => 01000001),即 ascii 表,它是符号表的始祖。PS:标准 ascii 表的第一位都是 0,因此只有128 个字符。
一句话总结:所有编码的爸爸。
gb2312/gbk/gb18030
聪明的天朝人民也想融入自己的文字。由于标准 ascii 字符首位为 0,他们用两个首位为 1 的字节(我=> 1100111011010010)组合来表示汉字。为了庆祝这种机智的做法,命名为 gb2312;加入繁体字后,发现还是不够用。让后面一个字节的首位也可以为 0 ,这样又可以多编码一倍的汉字,这种方案叫 gbk;再后来,加入少数民族文字,就有了 gb18030。
天朝另一个小区域一直在用繁体字,他们发明了 Big5 汉字编码。
一句话总结:中国特色的编码。
Unicode
“你们不可能每个人都这么乱搞一套编码吧?你们互不相懂,唧唧歪歪,互相伤害,还能好好做朋友吗?”另一个神秘组织终于忍不住了,“你们不是嫌 ascii 编码不了你们的文字么?那简单,我用 2个字节,把全世界所有的符号都统一编码起来。”这样就出现了 Unicode。最初用 2 个字节想表示所有字符的方案,叫做 UCS-2,这样最多能表示 65536个字符。突然有一天,这位小哥发现 2 个字节根本不可能编码世界上所有的字符,就有了后面的 UCS-4,用 4 个字节来统一编码总够了吧……
一句话总结:别闹了都听哥的。
utf-7/8/16/32
这样编码是好,然而传输呢?按照 UCS-2 方案,所有字符都需要两个字节来传输,例如要发送一个A,就要发送 0000000001000001 这么多位,很浪费有木有?而且在实际传输中,数字和字母这样的字符占绝大多数。机智的人们又想搞事情了,引用哈弗曼编码的思想,出现频率越高的字符用更短的编码传输,频率低的字符就用多一点的编码传输。
utf-8,即每次传输 8 位一组。
所以发送 A,传输时一组就够了,实际传输 01000001。
而发送“汉”,则需要三组才行, 实际传输 111001101011000110001001。其中蓝色 8 位是 Unicode编码的第一个字节,绿色 8 位是第二个字节。
utf-7,utf-16,utf-32 也是一样的道理。utf-7 期初是用于电子邮件,邮件以字母为主,ascii 实质也是7 位一组。后面 16 和 32 这两种分组没有流行起来。
PS:utf-8 传输简体汉字时,是按照 3 个字节传输的,这就有了 utf-8 是 3 个字节这样的说法。实际上在 UCS-2 下 utf-8 传输字符,用 1-3 都是有可能的哦^_^
另外经常写和字符有关程序的小伙伴,一定有这样一个经验,想要让 gbk 和 utf-8互转,都是先要转到 Unicode 哦。
一句话总结:按频率传输,节省流量。
0×02 更少的编码
前面这一小段故事讲完了,我们先休息一下,马上进入更有意思的话题。
话说天下大势,分久必合,合久必分。字符的编码由简入繁,势必也会化繁为简。那么如何用更少的字符去表示所有编码呢?
Quoted-printable 编码
ascii 有 127 个字符,而且很多符号甚至是不可打印的,那怎么才能让他们都能显示呢?这个简单,对于不可打印字符,就用“=XX”表示,其中 XX 是该字符的 ascii 编码。例如换页符(ascii 为 0C),就可以表示成 =0C。只需要 =和0-F 这17个字符哦^_^
一句话总结:即使不可打印,也要可见。
(责任编辑:网络)