1.1 避不开的编解码
能阅读本文的想开都是从事计算机开发工作的,那么弱弱的问自己一下,有没有受到过编码的纠缠呢?有没有动过心思,如果没有编码该多好?
1.1.1 这个翻译你得捏着鼻子用
要想说明白上面这个问题,我们应该了解一下人机交互--计算机是怎么识别我们现实世界如海的符号的,这些符号说白了就是我们人类使用的语言与符号,表示这些语言的符号太多了,而计算机中一个字节8位二进制,最多也不过是存储0~255个字符。因此必须经过一些拆分才能在计算机中使用。通俗来讲,我们可以把计算机能够理解的语言定义为英语,其他的语言要能够在计算机中使用,必须要经过一次翻译,将其翻译为英语。这个翻译的过程就是编码(Encode),而我们想再次使用计算机中的资料时,计算机会将存储在计算机中的字节翻译给我们成为能理解的语言,这是本次人机交互的另一半解码(Decode)。所以可以将编码就是将字符---》字节,解码就是将字节----》字符。
所以可以想象,只要不是说英语的国家要使用计算机就必须经过编码.这看起来虽然有些霸道,但这就是计算机的现状,所以我们现在大力推广汉语,如果有一天世界都说汉语了,那么我们就可以把计算机中存储信息的最小单位改成汉字,这样我们也就不存在编码问题了,可那些不会汉语的就也会骂娘了.
总结来说,编码产生的原因可以总结为一下几点:
- 在计算机中存储信息的最小单元是1个字节,即8个bit,所以能表述的字符范围在0-255个;
- 人类要表述的符号太多,无法用一个字节来表示;要解决这个矛盾必须要有一个新的数据结构char(字符),而从char到byte必须经过编码;
1.1.2 这个翻译是怎么工作的
上面我们知道了编解码是我们人机交互中避不开的一项翻译工作,那么这个翻译是如何进行的呢?我们知道计算机中数据的存储,说破大天,就是0和1,我们如果自己翻译,那么也只是将其翻译成各种进制的数字罢了。那么我们就可以想象数字和字符是怎么联系上的,小学大家应该都是做过连线题的(小白很喜欢),那么我们可以不可以制作一个规定,让某个数字代表一个字符,然后计算机翻译的时候按照这个规定,将字符和对应的数字进行连接这不就解决了这个问题了吗?计算机中存储的是这个字符对应的数字,我们取这个数据的时候,将数字转换为对应的字符就可以了。这其实就是编解码的通俗理解,当然这个编译过程,底层并不像我们说的这么轻松,不过在这里我们只要明白编码是怎么回事就行了。