小白袍 -- Chapter 1.1 避不开的编解码
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 避不开的编解码的更多相关文章
- 小白袍 -- Chapter 1 Java中的Encode与Decode
前几天做一个邮件发送功能,一些常用信息配置在properties文件中,通过prop.getProperty(key)来获取配置的信息,结果配置文件中是用中文写的,邮件发送成功后,邮箱中的激活链接是乱 ...
- 小白袍 -- Chapter 1.4.1.1 URL编码的理论解读
1.4.1.1 URL编码的理论解读 我们在做JavaWeb时避不过GET请求,GET请求和POST请求最大一点不同就在于参数,GET请求的参数会URL中,而POST请求的参数则会在HTTP Hea ...
- bzoj3438: 小M的作物(那年花开最小割)
3438: 小M的作物 题目:传送门 题解: 最小割标准水题(做了几天的最小割之后表示是真的水) 为什么水:博主已经做过两道基本一样的题目了... 详情参考:bzoj3894 代码: #include ...
- System.NullReferenceException:未将对象引用设置到对象的实例,这是一个新鸟,中鸟,老鸟都避不开的错误
原文链接:http://www.jb51.net/article/30005.htm
- java音视频编解码问题:16/24/32位位音频byte[]转换为小端序short[],int[],以byte[]转short[]为例
前言:Java默认采用大端序存储方式,实际编码的音频数据是小端序,如果处理单8bit的音频当然不需要做转换,但是如果是16bit或者以上的就需要处理成小端序字节顺序. 注:大.小端序指的是字节的存储顺 ...
- python基础小知识,is和==的区别,编码和解码
1.is和==的区别 1)id() 通过id()我们可以查看到一个变量表示的值在内存中的地址 >>> s1 = "Tanxu" >>> s2 = ...
- 微信支付URL编解码小方法
--> 打开chrome --> F12或Fn+F12打开控制台 --> encodeURIComponent("url") --> 回车
- 编解码-protobuf
Google的Protobuf在业界非常流行,很多商业项目选择Protobuf作为编解码框架,Protobuf的优点. (1)在谷歌内部长期使用,产品成熟度高: (2)跨语言,支持多种语言,包括C++ ...
- netty权威指南学习笔记七——编解码技术之GoogleProtobuf
首先我们来看一下protobuf的优点: 谷歌长期使用成熟度高: 跨语言支持多种语言如:C++,java,Python: 编码后消息更小,更利于存储传输: 编解码性能高: 支持不同协议版本的兼容性: ...
随机推荐
- 10 个最佳的 Node.js 的 MVC 框架
补充:http://nokit.org/ https://thinkjs.org/zh-cn/doc/index.html Node.js 是一个基于Chrome JavaScript 运行时建立的一 ...
- 深入理解JavaScript系列(35):设计模式之迭代器模式
介绍 迭代器模式(Iterator):提供一种方法顺序一个聚合对象中各个元素,而又不暴露该对象内部表示. 迭代器的几个特点是: 1.访问一个聚合对象的内容而无需暴露它的内部表示. 2.为遍历不同的集合 ...
- 深入理解JavaScript系列(12):变量对象(Variable Object)
介绍 JavaScript编程的时候总避免不了声明函数和变量,以成功构建我们的系统,但是解释器是如何并且在什么地方去查找这些函数和变量呢?我们引用这些对象的时候究竟发生了什么? 原始发布:Dmitry ...
- ionic2 目录
首先 ionic2 暂时找不到中文文档.本人英语又很渣.无奈之下只能依赖于百度翻译.完全是已自己理解的方式运作 ,可能里面会有一些偏差之类的 不过我都测试过代码是可以跑通的 只不过讲解的部分可能... ...
- HDU 5011 NIM博弈
http://www.cnblogs.com/exponent/articles/2141477.html http://acm.hust.edu.cn/vjudge/contest/122814#p ...
- owin解决跨域js请求
最近在用owin打了一个建议的http的api服务,但遇到了js跨域访问的问题,后来在网上找到了答案,已帮助遇到此问题的人 1.首先nuget先按着owin依赖的包,然后至关重要的一步是引用Micro ...
- 编程语言的发展历史剧。(参考https://baijiahao.baidu.com/s?id=1588675986991787716&wfr=spider&for=pc)
1800年 约瑟夫·玛丽·雅卡尔(Joseph Marie Jacquard),设计出人类历史 上首台可设计织布机——雅卡尔织布机,对将来发展出其他可编程机器起了重要作用 1842年 阿达·洛夫莱斯( ...
- HTML标签 随笔2
3-1 使用ul 添加新闻信息列表 ul-li是没有前后顺序的信息列表. 语法: <ul> <li>信息</li> <li>信息</li&g ...
- JDBC实现动态查询
一 概述 1.什么是动态查询? 从多个查询条件中随机选择若干个组合成一个DQL语句进行查询,这一过程叫做动态查询. 2.动态查询的难点 可供选择的查询条件多,组合情况多,难以一一列举. 3.最终查询语 ...
- 使用Android Studio搭建Android开发环境
一.Android Studio简单介绍 2013年GoogleI/O大会首次发布了Android Studio IDE(Android平台集成开发环境).它基于Intellij IDEA开发环境,旨 ...