Skip to content

Latest commit

 

History

History
267 lines (207 loc) · 7.68 KB

45-92241-编码演化.sy.md

File metadata and controls

267 lines (207 loc) · 7.68 KB
show version enable_checker
step
1.0
true

编码进化

回忆上次内容

  • 上次输出了大红心
    • 找到了红心对应的编码
    • 黑红梅方都对应有编码
  • 这种编码叫做 unicode
    • 原来的叫做 ascii️
  • \u这种编码方式叫什么呢?🤔
  • 还是从ascii的来历开始

编码来历

  • 目前最熟悉的编码是 ascii编码
    • 包括控制字符、大小写字符、数字、符号
    • ascii 有 7 位,从0x00-0x7F,第 1 位都为 0
  • 但如果第 1 位是 1
    • 又会如何呢?

图片描述

尝试输出

图片描述

  • 找到一个数字 0xa7
    • 找到他对应的字符
    • 还可以转化回来

图片描述

  • 这规律
    • 和ascii一样的
    • 也就是说这个字节里面除了 ascii 的 128 个字符之外
      • 还可以有一定的
      • 也可以对应一些编码
    • 也正是这个空间让 ascii 成为基础的字符编码
  • 先回顾一下字符编码的历史

编码格式演化

  • 最早的数字编码是摩斯电码
  • 三种状态
    • 长短空
    • 全靠发报人掌握节奏
    • 每个人都是自己的电信运营商

图片描述

博多码

  • 电传打字机编码
    • 只有两种状态
      • 0
      • 1
    • 有控制字符
    • 靠同步时钟控制节奏
    • 可以存储在纸带上
    • 只有大写没有小写
    • 符号不是很丰富
    • 是一种 5bits 的编码

图片描述

ibm 之野望

  • 1950s 末
    • ibm 的前身
    • 拿到了美国人口统计局的巨大订单
    • 当时用的是采集卡片
    • 以前就是去挨家挨户的问人家
    • 然后打卡
    • 所以当年查户口不是一个好词
  • 刚开始用计算机进行统计
    • 在此之前
    • 无论是身份、存款、地产靠的都是纸质的契约
    • 计算机刚刚起步
    • 更没有相互联通的数据中心了

图片描述

  • 这里面涉及到统计计数

    • 不但要对于性别、年龄等 分类汇总
    • 而且要显示出来
  • 怎么表示这 10 个数字字符呢?

  • 至少要用 116进制数 进行编码

  • 那究竟如何编码呢?

标准形成

  • 同样是表示10个数字
  • 不同的机器有不同的编码方式

图片描述

  • 不同编码表示的范围也不一样
    • 有的是为了减法更容易计算
    • 有的是为了表示的数字更大
    • 有的是为了可以表示负数
  • 各种编码之间转化也需要成本
  • 为了数据交换方便的话
  • 还是得有个统一
  • 统一到什么编码方式呢呢?

数字表示

图片描述

  • 上图HMS的个位数字就是8421编码
    • 从上到下总共4个二进制位
    • 分别代表8421
    • 一溜就是一个数字
  • 小时H总共两位
    • 十位
      • 最大的小时数为24
      • 十位数值不会超过2
      • 所以两位就够
        • 两位二进制数可以表示0-3
      • 数值为(0)×20+(1)×20 = 1
    • 个位
      • 最大的数字就是9
      • 不会超过10
      • 总共需要4位
      • 数值为(0)×20+(0)×20 = 0
    • 小时的总体数值为10
  • 分钟和秒钟的逻辑类似
  • 这就是8421码

BCD 码

  • Binary-Coded Decimal
    • 最终数字领域的编码统一到了8421
    • 最简单的编码实现了统一
    • 8421 也就是 BCD 编码
    • 8421 代表着每一位二进制数对应的数值

图片描述

  • 编码其实就是纯纯的2进制数转化结果
  • 其实在今天的 ascii
    • 数字字符对应的字节是0x30-0x39
    • 0x30-0x39后4位 也还是 BCD 编码
    • ibm 的编码的数字部分也是基于 bcd 发展而来的
  • 那字母部分是怎么来的呢?

BCDIC

  • ibm 开始是做这个人口卡片的
    • 他根据业务特点
    • 制作了一种 6bits 的字符编码格式
    • BCDIC
  • Binary Coded Decimal Interchange Code
    • 是一种 6bits 的编码格式

图片描述

  • 6bit 对应着一个字符
  • 注意他是 4 行 12 列
  • 这种模式也酝酿着字符序号的不连续

行列

图片描述

  • 可以理解为 6 位 2进制数字
  • 代表一个字符

图片描述

继续发展

图片描述

  • BCDIC 这个编码本身也在不断发展变化
  • 最后变化到了离谱的程度
    • 每个版本有不同
    • 总共有 6 个不兼容的版本
    • 没有各个版本之间的转化工具
    • 可能是为了多卖给人口统计局来收钱?

编码细节

图片描述

  • 编码不兼容导致旧的数据不能用了
  • 这个编码转化没人知道怎么弄
    • 成了 ibm 历史上最大黑点和最高机密
    • 基本数字和字符比较稳定
    • IBM 有自己的打印机专门进行解码和打印
    • 话说不应该是最开始就想好么?
    • 现实却是设计跟着思路
    • 思路跟着纸带走
  • ibm 终于意识到不同的格式之间应该编码统一了 😓
  • 用什么编码统一的呢?

EBCDIC

图片描述

  • Extended Binary Coded Decimal Interchange Code
  • 符号数量提升
  • 也有一些控制字符
    • NUL
    • DEL
    • CR(还记得什么意思么?)
    • NL(还记得什么意思么?)
  • 这种编码的原因是要和原来的 6bits 的编码可以快速的转化
    • 按理说以 ibm 当时垄断的情况
    • 可以把这个编码做成标准
    • RCA 和富士开始制作兼容机
    • 也兼容这种编码
  • 但是 ebcdic 最终还是被 ascii 所击败
    • 但问题就是这个编码本身就不合理!
    • ascii 并不是从他发展而来的
    • 因为他的字母依然是不连续的

比较

  • ascii 的优点
    • ascii大小写字母之间只差 1 位(bit)
      • 大小写不敏感的时候匹配容易做
    • ascii 的字母序号是连续的
      • 做字符和字符串比较的时候就非常直接和容易
      • 做是否是字母的判断也很容易
    • ascii 还把以1打头的后一半空间统一给空出来了
  • ascii 本身的合理性
    • 使得他最终打败了强大的 ibm 的 ebcdic
    • 标准被重置
  • 不过当时计算机行业的企业凤毛麟角
    • ibm 还是业界翘楚

图片描述

Extended ASCII

  • 空出的空间干什么呢?
    • 反正空着也是空着
    • 最初还是 ibm 是定义了 Extended ASCII
  • ascii 的扩展集
    • 第一位是 0 后面 7 位对应 ascii 编码集
    • 第一位是 1 对应 ascii-extended

ascii-extended

图片描述

总结

  • 这次回顾了字符编码的进化过程
    • ibm 曾经的 EBCDIC 有很多黑料
    • 7bits 的 ascii 是最后的胜利者
    • Extended ASCII 填满了后面的 128 个位置
  • 这一填不要紧
    • 究竟是什么字符来填呢?
    • 法文、德文还是俄文?
    • ibm 又一拍脑袋就这么定了
  • 好使不好使呢?🤔
  • 我们下次再说!👋