小白袍 -- 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: 编码后消息更小,更利于存储传输: 编解码性能高: 支持不同协议版本的兼容性: ...
随机推荐
- 给string添加新的函数
var str = "abcdefg";String.prototype.constr = function(){ return this.split('').join('-'); ...
- java输出九九乘法口诀表
使用双重for循环输出九九乘法口诀表 public static void main(String[] args){ formula();} /** * for 循环实现9*9乘法口诀表 * &quo ...
- Java使用TCP聊天程序
前面使用了UDP进行通信的聊天程序 现在做一个用TCP进行通信的聊天程序 原理: ServerSocket Socket 1.开一个线程监听端口,准备接收消息 2.不断接受消息发送到目的端口 P.S. ...
- String方法使用示例
import java.lang.String; public class StringMethodDemo1{ /** 熟悉String的常用方法. */ public static void ma ...
- stark——查看页面编辑删除按钮
一.数据列表 设计查页面,主要展示两部分内容,表头部分和数据部分, 表头通过遍历list_display和默认要显示的编辑和删除字段. 1.数据构建 (1)service/stark.py,后台数据构 ...
- access与excel
我们承认,Excel是伟大的,但却又不得不承认,Excel不是万能的,它至少在"多数据表关联"."数据处理自动化"."大量数据的处理"等方面 ...
- Eclipse Startup
First of all, we take a look at class EclipseStarter /********************************************** ...
- OSGi Bundle
OSGi Framework looks like OS, Bundle looks like program, OS can create a process to run program with ...
- eclipse 误删文件的恢复,代码的恢复
误删除文件的恢复 在用eclipse进行代码编写操作时,有时会误删除文件或者文件包.通过eclipse的恢复文件功能可以恢复误删除的文件. 具体步骤为: 1.选择误删除文件在eclipse所在包(文件 ...
- geth访问公有链
同步以太坊,配置rpc地址 mkdir /opt/blockchain nohup geth --syncmode "fast" --cache=1024 --maxpeers 3 ...