1.1  避不开的编解码

  能阅读本文的想开都是从事计算机开发工作的,那么弱弱的问自己一下,有没有受到过编码的纠缠呢?有没有动过心思,如果没有编码该多好?

1.1.1  这个翻译你得捏着鼻子用  

  要想说明白上面这个问题,我们应该了解一下人机交互--计算机是怎么识别我们现实世界如海的符号的,这些符号说白了就是我们人类使用的语言与符号,表示这些语言的符号太多了,而计算机中一个字节8位二进制,最多也不过是存储0~255个字符。因此必须经过一些拆分才能在计算机中使用。通俗来讲,我们可以把计算机能够理解的语言定义为英语,其他的语言要能够在计算机中使用,必须要经过一次翻译,将其翻译为英语。这个翻译的过程就是编码(Encode),而我们想再次使用计算机中的资料时,计算机会将存储在计算机中的字节翻译给我们成为能理解的语言,这是本次人机交互的另一半解码(Decode)。所以可以将编码就是将字符---》字节,解码就是将字节----》字符。

  所以可以想象,只要不是说英语的国家要使用计算机就必须经过编码.这看起来虽然有些霸道,但这就是计算机的现状,所以我们现在大力推广汉语,如果有一天世界都说汉语了,那么我们就可以把计算机中存储信息的最小单位改成汉字,这样我们也就不存在编码问题了,可那些不会汉语的就也会骂娘了.

总结来说,编码产生的原因可以总结为一下几点:

  • 在计算机中存储信息的最小单元是1个字节,即8个bit,所以能表述的字符范围在0-255个;
  • 人类要表述的符号太多,无法用一个字节来表示;要解决这个矛盾必须要有一个新的数据结构char(字符),而从char到byte必须经过编码;

1.1.2  这个翻译是怎么工作的

  上面我们知道了编解码是我们人机交互中避不开的一项翻译工作,那么这个翻译是如何进行的呢?我们知道计算机中数据的存储,说破大天,就是0和1,我们如果自己翻译,那么也只是将其翻译成各种进制的数字罢了。那么我们就可以想象数字和字符是怎么联系上的,小学大家应该都是做过连线题的(小白很喜欢),那么我们可以不可以制作一个规定,让某个数字代表一个字符,然后计算机翻译的时候按照这个规定,将字符和对应的数字进行连接这不就解决了这个问题了吗?计算机中存储的是这个字符对应的数字,我们取这个数据的时候,将数字转换为对应的字符就可以了。这其实就是编解码的通俗理解,当然这个编译过程,底层并不像我们说的这么轻松,不过在这里我们只要明白编码是怎么回事就行了。

小白袍 -- Chapter 1.1 避不开的编解码的更多相关文章

  1. 小白袍 -- Chapter 1 Java中的Encode与Decode

    前几天做一个邮件发送功能,一些常用信息配置在properties文件中,通过prop.getProperty(key)来获取配置的信息,结果配置文件中是用中文写的,邮件发送成功后,邮箱中的激活链接是乱 ...

  2. 小白袍 -- Chapter 1.4.1.1 URL编码的理论解读

    1.4.1.1  URL编码的理论解读 我们在做JavaWeb时避不过GET请求,GET请求和POST请求最大一点不同就在于参数,GET请求的参数会URL中,而POST请求的参数则会在HTTP Hea ...

  3. bzoj3438: 小M的作物(那年花开最小割)

    3438: 小M的作物 题目:传送门 题解: 最小割标准水题(做了几天的最小割之后表示是真的水) 为什么水:博主已经做过两道基本一样的题目了... 详情参考:bzoj3894 代码: #include ...

  4. System.NullReferenceException:未将对象引用设置到对象的实例,这是一个新鸟,中鸟,老鸟都避不开的错误

    原文链接:http://www.jb51.net/article/30005.htm

  5. java音视频编解码问题:16/24/32位位音频byte[]转换为小端序short[],int[],以byte[]转short[]为例

    前言:Java默认采用大端序存储方式,实际编码的音频数据是小端序,如果处理单8bit的音频当然不需要做转换,但是如果是16bit或者以上的就需要处理成小端序字节顺序. 注:大.小端序指的是字节的存储顺 ...

  6. python基础小知识,is和==的区别,编码和解码

    1.is和==的区别 1)id() 通过id()我们可以查看到一个变量表示的值在内存中的地址 >>> s1 = "Tanxu" >>> s2 = ...

  7. 微信支付URL编解码小方法

    --> 打开chrome --> F12或Fn+F12打开控制台 --> encodeURIComponent("url") --> 回车

  8. 编解码-protobuf

    Google的Protobuf在业界非常流行,很多商业项目选择Protobuf作为编解码框架,Protobuf的优点. (1)在谷歌内部长期使用,产品成熟度高: (2)跨语言,支持多种语言,包括C++ ...

  9. netty权威指南学习笔记七——编解码技术之GoogleProtobuf

    首先我们来看一下protobuf的优点: 谷歌长期使用成熟度高: 跨语言支持多种语言如:C++,java,Python: 编码后消息更小,更利于存储传输: 编解码性能高: 支持不同协议版本的兼容性: ...

随机推荐

  1. 《Python编程从入门到实践》_第三章_列表简介

    什么是列表呢? 官方说明就是由一些列按特点顺序排列的元素组成.其实可以看出很多个字符串的有序组合吧,里面的内容可以随时的删除,增加,修改. 下面这个就是一个列表,python打印列表的时候会将中括号和 ...

  2. bzoj 5314: [Jsoi2018]潜入行动

    Description 外星人又双叒叕要攻打地球了,外星母舰已经向地球航行!这一次,JYY已经联系好了黄金舰队,打算联合所有JSO Ier抵御外星人的进攻.在黄金舰队就位之前,JYY打算事先了解外星人 ...

  3. tomcat server 报错之 More than the maximum allowed number of cookies

    More than the maximum allowed number of cookies EVERE: Error processing request java.lang.IllegalArg ...

  4. Canvas知识点汇总

    本文主要记录Canvas基础知识汇总. 1.Canvas定义 <canvas> 元素是HTML5中的新元素,通过它可以在网页中绘制出所需的图形.<canvas>标签只是图形的容 ...

  5. caffe-windows之手写体数字识别例程mnist

    caffe-windows之手写体数字识别例程mnist 一.训练测试网络模型 1.准备数据 Caffe不是直接处理原始数据的,而是由预处理程序将原始数据变换存储为LMDB格式,这种方式可以保持较高的 ...

  6. LDAP入门与OpenLDAP使用配置

    LDAP入门与OpenLDAP使用配置 1.LDAP简介 LDAP(轻量级目录访问协议,Lightweight Directory Access Protocol)是实现提供被称为目录服务的信息服务. ...

  7. matlab练习程序(单源最短路径Bellman-Ford)

    该算法可以用来解决一般(边的权值为负)的单源最短路径问题,而dijkstra只能解决权值非负的情况. 此算法使用松弛技术,对每一个顶点,逐步减少源到该顶点的路径的估计值,直到达到最短的路径. 算法运算 ...

  8. window medio player 完美代码

    var arr = [               '<object width="240" height="240" align="basel ...

  9. 如何从ERP下载Sales BOM到CRM

    在ERP使用事务码CS01创建一个BOM,类型选择5 - Sales BOM: BOM的抬头维护material 1419,在BOM的component部分维护另外两个material 1421和14 ...

  10. c++互斥锁的实现

    class IMyLock { public: virtual ~IMyLock(){} ; ; }; class Mutex : public IMyLock { public: Mutex(); ...