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 的编码
- 只有两种状态
- 1950s 末
- ibm 的前身
- 拿到了美国人口统计局的巨大订单
- 当时用的是采集卡片
- 以前就是去挨家挨户的问人家
- 然后打卡
- 所以当年查户口不是一个好词
- 刚开始用计算机进行统计
- 在此之前
- 无论是身份、存款、地产靠的都是纸质的契约
- 计算机刚刚起步
- 更没有相互联通的数据中心了
-
这里面涉及到统计
计数
- 不但要对于性别、年龄等
分类汇总
- 而且要显示出来
- 不但要对于性别、年龄等
-
怎么表示这
10
个数字字符呢? -
至少要用
1
位16进制数
进行编码 -
那究竟如何编码呢?
- 同样是表示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码
- Binary-Coded Decimal
- 最终数字领域的编码统一到了8421
- 最简单的编码实现了统一
8421
也就是BCD
编码- 8421 代表着每一位二进制数对应的数值
- 编码其实就是纯纯的2进制数转化结果
- 其实在今天的
ascii
中- 数字字符对应的字节是
0x30-0x39
0x30-0x39
的后4位
也还是 BCD 编码- ibm 的编码的数字部分也是基于 bcd 发展而来的
- 数字字符对应的字节是
- 那字母部分是怎么来的呢?
- ibm 开始是做这个人口卡片的
- 他根据业务特点
- 制作了一种 6bits 的字符编码格式
- BCDIC
- Binary Coded Decimal Interchange Code
- 是一种 6bits 的编码格式
- 6bit 对应着一个字符
- 注意他是 4 行 12 列
- 这种模式也酝酿着字符序号的不连续
- 可以理解为 6 位 2进制数字
- 代表一个字符
- BCDIC 这个编码本身也在不断发展变化
- 最后变化到了离谱的程度
- 每个版本有不同
- 总共有 6 个不兼容的版本
- 没有各个版本之间的转化工具
- 可能是为了多卖给人口统计局来收钱?
- 编码不兼容导致旧的数据不能用了
- 这个编码转化没人知道怎么弄
- 成了 ibm 历史上最大黑点和最高机密
- 基本数字和字符比较稳定
- IBM 有自己的打印机专门进行解码和打印
- 话说不应该是最开始就想好么?
- 现实却是设计跟着思路
- 思路跟着纸带走
- ibm 终于意识到不同的格式之间应该编码统一了 😓
- 用什么编码统一的呢?
- 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 还是业界翘楚
- 空出的空间干什么呢?
- 反正空着也是空着
- 最初还是 ibm 是定义了 Extended ASCII
- ascii 的扩展集
- 第一位是 0 后面 7 位对应 ascii 编码集
- 第一位是 1 对应 ascii-extended
- 这次回顾了字符编码的进化过程
- ibm 曾经的 EBCDIC 有很多黑料
- 7bits 的 ascii 是最后的胜利者
- Extended ASCII 填满了后面的 128 个位置
- 这一填不要紧
- 究竟是什么字符来填呢?
- 法文、德文还是俄文?
- ibm 又一拍脑袋就这么定了
- 好使不好使呢?🤔
- 我们下次再说!👋