小白袍 -- 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: 编码后消息更小,更利于存储传输: 编解码性能高: 支持不同协议版本的兼容性: ...
随机推荐
- Guid和Oracle中16进制字符的转换
我们知道在Oracle中存的guid是16进制字符串,而在我们的C#代码中存的是guid对象,这样我会就要进行转换, 下面给出了两者进行转换的方法: public class Guid2RawProc ...
- linux服务器git pull/push时避免频繁输入账号密码
1.先cd到根目录,执行git config --global credential.helper store命令 [root@iZ25mi9h7ayZ ~]# git config --global ...
- bzoj 5329: [Sdoi2018]战略游戏
Description 省选临近,放飞自我的小Q无心刷题,于是怂恿小C和他一起颓废,玩起了一款战略游戏. 这款战略游戏的地图由n个城市以及m条连接这些城市的双向道路构成,并且从任意一个城市出发总能沿着 ...
- php 不用第三个变量 交换两个变量的值汇总
//方法一:$a ="abc";$b="def"; $a = $a^$b;$b = $b^$a;$a = $a^$b; //方法二:list($a, $b)= ...
- asp ajax
//[AjaxPro.AjaxMethod()] //public DataTable loadChecked() //{ // return BDAContext.GetObject<ICNP ...
- CentOS初使用命令总结
最近买了一台aliyun(ECS服务器)用来学习使用,初次使用难免要走弯路.遇到一些问题好长时间解决不了,结果经人指点豁然开朗.于是乎,总结了一些新生上路经验. 首先要解决的问题是:通过PuTTY.S ...
- 人工智能(AI)
一.人工智能的核心——机器学习 人工智能是一个很大的圈子,但人工智能的基础是机器学习. 机器学习是什么? 其实就是人告诉机器想做什么事情,并且给它一堆数据让它模仿着去做. 机器学习需要什么? 算法.数 ...
- Bootstrap拟态框+支付宝首页
任务没完成,继续来!因为刚才网不好,我辛辛苦苦打了洋洋洒洒一大堆都没了! 我们今天主要是说一个简单的由Bootstrap和HTML5结合而成的小案例: 首先:由标题可得知,这是移动端,所以需要这样一串 ...
- 什么是SQL注入?什么是XSS攻击?什么是CSRF攻击?
1. XSS(Cross Site Script,跨站脚本攻击) 是向网页中注入恶意脚本在用户浏览网页时在用户浏览器中执行恶意脚本的攻击方式. 1.1跨站脚本攻击分有两种形式: 反射型攻击(诱使用户点 ...
- Flink -- Java Generics Programming
Flink uses a lot of generics programming, which is an executor Framework with cluster of executor ha ...