美文网首页
编码浅谈

编码浅谈

作者: 楠昭 | 来源:发表于2017-12-15 20:44 被阅读0次

为什么要熟悉编码的本质?

  1. 深入理解计算机软硬件知识
  2. 深入理解计算机背后的语言

一、先来理解编码

  1. 广义的理解:编码就是交流,目的是给事物赋予名称,要和加密区分开。

  2. 常见的例子:我们使用的语言,文字,以及手语,盲文都是编码,还有经典的莫斯编码


    莫斯编码便记图
  3. 意义:计算机处理声音,图像,视频等等都需要各自的编码

  4. 原则:将简单短促的编码分配给使用频率较高的字母

  5. 神奇的规律:两个不同的事物,只要经过适当组合,就可以表示所有类型的信息
    (这就是计算机的灵魂所在,复杂的电路和逻辑背后就是永恒且简洁的二进制)

二、致敬伟大的二进制

  1. 奇妙的二进制:任何信息都能转化成两种或多种可能性的选择,因此就可以用二进制表示所有信息。


    奇妙的二进制
  2. 怎么做到的:一个比特就代表两种情况,是或非。为了表示更多的情况就需要更多的比特,所能表示的情况数等于2的整数次幂


    以编码为例,如果要给26个字母编码的话,用5个比特就够了
  3. 大思路:计算机中所有信息都是以比特流的形式存在
  4. 字节:为了方便表示比特流,引入了字节的概念,请牢记1个字节(byte)=8个比特(bit)蟹蟹。另外由于4位二进制可以很方便的用一位16进制表示,因此我们一般就用两位16进制表示一个字节


    比如抓到的数据包就是将字符按ACSII编码然后以16进制表示,图中两位16进制表示一个字节
  5. 进制转换:我们日常生活中使用的是以10为基数的数字系统,而理解二进制时要将2看作基数,逢2进位


    以2为基数的数字系统
    简单进制转换

三、我们是怎么使用编码的

如果你是一个生活在2003年的程序员,却不了解字符、字符集、编码和Unicode这些基础知识。那你可要小心了,要是被我抓到你,我会让你在潜水艇里剥六个月洋葱来惩罚你。
---------Joel Spolsky

首先编码定义了两件事:

  1. 字节是怎么分组的,如8 bits或16 bits一组,这也被称作编码单元。
  2. 编码单元和字符之间的映射关系。例如,在ASCII码中,十进制65映射到字母A上


    附上ASCII最好查的一张表,表示编码怎么映射到字符上

其次我们来看一下编码的历史

最早出场的就是 ASCII(美国信息交换标准码),其编码长度为7位,最多可表示128个编码,而一个字符要有8个比特,这样编码的话就会剩下一个比特位没有用,也就是从128到255的编码并没有被制定ASCII标准的人所规定,因此其它国家的人趁这个机会开始使用128到255范围内的编码来表达自己语言中的字符。例如,144在阿拉伯人的ASCII码中是گ,而在俄罗斯的ASCII码中是ђ。即使在美国,对于未使用区域也有各种各样的利用。IBM PC就出现了“OEM 字体”或”扩展ASCII码”,为用户提供漂亮的图形文字来绘制文本框并支持一些欧洲字符,例如英镑(£)符号。
这样一来ASCII码的问题在于尽管所有人都在0-127号字符的使用上达成了一致,但对于128-255号字符却有很多很多不同的解释,出于统一的目的,Unicode诞生了。

最后来看看Unicode的世界

  1. 正确理解:Unicode就像一个电话本,标记着字符和数字之间的映射关系它对支持字符的数量没有限制,也不要求字符必须占两个、三个或者其它任意数量的字节。

  2. 流行的编码方案:utf-8和utf-16

  3. utf-8:在UTF-8中,0-127号的字符用1个字节来表示,使用和US-ASCII相同的编码(对ASCII的向后兼容)。只有128号及以上的字符才用2个,3个或者4个字节来表示,比如汉字一般会用3个字节来表示。因此,UTF-8被称作可变长度编码。

相关文章

  • 2018-08-13

    浅谈iOS编码规范 命名 awakeFromNib不能拿到真实尺寸

  • 浅谈编码

    关于编码 编码问题是在编程中经常见到的一个问题.最开始,计算机是由美国人发明的,因此,最开始的编码方式是采用ASC...

  • 编码浅谈

    为什么要熟悉编码的本质?深入理解计算机软硬件知识深入理解计算机背后的语言 一、先来理解编码 广义的理解:编码就是交...

  • 浅谈字符编码

    ASCII 占1个字节,只支持英文 GB2312 占两个字节,支持6700+汉字 GBK GB2312的升级版,支...

  • URL编码浅谈

    本文是对在正常网络请求的URL中哪些字符需要编码,为什么需要编码进行了说明 URI介绍 为什么需要URL编码 通常...

  • 一篇文章助你理解Python2中字符串编码问题

    前几天给大家介绍了unicode编码和utf-8编码的理论知识,没来得及上车的小伙伴们可以戳这篇文章:浅谈unic...

  • CSS综合13

    浅谈编码规范 命名技巧 语义化标签优先 基于功能命名、基于内容命名、基于表现命名 简略、明了(翻译成英文) 所有命...

  • 防御 XSS攻击

    浅谈XSS—字符编码和浏览器解析原理 XSS简介 XSS攻击全称跨站脚本攻击,是为不和层叠样式表(Cascadin...

  • 浅谈什么是字符编码

    计算机是如何存储数据的 在谈什么是字符编码前,我们首先要知道一个概念,计算机是如何存储数据的:计算机是由逻辑电路组...

  • 浅谈Java的编码问题

    前言 因为最近在做安全的问题 各种加密算法最后得出来的都是byte[ ],存储在本地则是char。因为之前不是很熟...

网友评论

      本文标题:编码浅谈

      本文链接:https://www.haomeiwen.com/subject/enryixtx.html