show | version | enable_checker |
---|---|---|
step |
1.0 |
true |
- 上次比较好玩
- 使用了随机这个包
- 然后造成了满屏各种各样好玩的东西刷屏
- 字符
- 在计算机当中
- 是用
二进制
形式存储的
- 是用
- 在计算机当中
- 每个字符
- 都有自己的字符序号
- 字符序号 是一个数字
- 最早 将字符电子化的 是电报
- 电报时代对于英文、数字的编码
- 用的是
摩斯电码
- 摩斯电码靠的是
- 长、短、断
- 26个字符不连续
- 这是个字符电子化的产物
- 摩斯电码 将字符
电子化
- 后来是 怎么完成
数字化
的呢?🤔
- 后来是 怎么完成
- 电报传过来
- 需要 快速解码并记录
- 于是有了
- 电传打字机(tele-typewriter)
- 电传打字机
- 需要 统一编码的 字母和数字
- ASCII最早是
- 7-bit电传打字机(tele-typewriter)的
- 存储代码
- 7-bit电传打字机(tele-typewriter)的
- 当时 7个打孔位置
- 今天变成了
- 7-bit
- 今天变成了
- 要把 滴、答、停的 电报信号
- 变成 0和1的 二进制信号
- 贝尔公司 控制着 电报行业
- 电报行业 要用 打字机 发送和接受 电报信号
- 主要设备 就是 电传打字机
- 电报行业 要用 打字机 发送和接受 电报信号
- 贝尔公司 提出草案
- 试图 建立电传打字机的标准
- 筹备 标准化协会
- 试图 建立电传打字机的标准
- 1960年10月6日
- 美国标准协会(ASA)X3 召开首次会议
- ASCII标准 开始了进化
- 美国标准协会(ASA)X3 召开首次会议
- 美国标准协会(ASA)
- 进化为
- 美国国家标准协会
- (American National Standards Institute)
- 简称ANSI
- 美国国家标准协会
- 帮助ASCII
- 继续演化
- 进化为
- (ASA X3.4-1963) 第一次明确
- 大小写字母之间
- 只差
一
个二进制位
- 只差
- 大小写字母之间
- 这很重要
- 因为
- 上游 影响 下游
- 因为
- 错误编码 一旦 成为标准
- 所有 应用了错误编码的 文档
- 就
都
废掉了
- 就
- 所有 应用了错误编码的 文档
- 就像当年
- IBM 的 EBCDIC
- EBCDIC编码的问题
- 是 字母不连续
- i、j之间 不直接相连
- 判断字符 是否是 小写字母
- 需要做六次判断
- 导致 EBCDIC最终
- 被ascii所淘汰
- 是 字母不连续
- IBM 使用的编码EBCDIC 编码
- 就是由于有致命缺陷被废弃了
- IBM的卡片
- 需要专门的解码方式
- 才能被还原
- 需要专门的解码方式
- ASCII 开始演化为
- 字符数字化的主要编码
- ASCII 中的
- 字符和序号
- 是如何对应的呢?
- 字符和序号
-
先看看"oeasy"这个字符串
- 是如何存在的🤔
-
字符都对应着一个数字序号
- 这个数字序号 在计算机上
- 究竟是 如何存储 的呢?
- 这个数字序号 在计算机上
- 用 二进制形式
- 存储在
字节
中
- 存储在
- 可以看看这个二进制形式么?
- 8-bit 构成 byte
- 上图的字节为
- (0011 0101)2进制
- (35)16进制
- 对应着字符数字'5'
- 我想把序号 从0到127 的 ASCII字符
- 全都打出来
- 可以么?
- 全都打出来
- 回忆编写show.py
- 注意缩进位置
- 注意
.
和,
的区别
for n in range(128):
print(chr(n),end="")
if n % 16 == 0:
print()
- esc
- :w|!python3 %
- 保存并用python3运行
- :w|!python3 %
- 确实可以输出出来
- 这输出 靠的是
- 把序号转化成字符的 函数
- chr
- 把序号转化成字符的 函数
- 但 没有看到数字
0
?- 理论上 0在1之前
- 仿佛 已经被黑暗森林 所吞没
- 理论上 0在1之前
- 在原来的基础上修改代码
- 如下所示
for n in range(128):
print(chr(n).encode(),end="")
if n % 8 == 7:
print()
- 运行结果
- 0和前面的字节都现了原形
- 红底部分出现了
- 黑暗森林仿佛看得见了
- 红底部分出现了
- 0a 对应的字节状态是
- b"\n"
- b"\n" 是什么呢?
-
将目前的终端往右移动
- 重新开启一个终端
- 键入python3 进入游乐场
- 重新开启一个终端
-
使用ord 得到\n 的序号
- 字符'\n'对应
- 序号为 10
- 字节状态 为b"\x0a"
- 这
\n
字符 好像- 在 哪里 见过?🤔
- 想要了解 这个'\n'
- 还得 回到最初
- 回到 开始的时候
- 前面介绍过
- c语言 最初的 "hello world"
- 注意到
hello world
后面的\n
了 吗?
- 特别注意 斜杠的方向
- 左上到右下
\
叫 反斜杠- 键盘位置 在回车键附近
- 左上到右下
- 那
\n
到底 是什么??🤔
\n
是一个整体- 占
一
个字节- 算
一
个字符
- 算
- 占
- 序号是(
10
)10进制
- 也就是(
0x0a
)16进制
- 位于
abcd
后面的字符的第5个字符 - 作为文档结束的字符
- 也就是(
\n
在vim显示的字节状态中- 显示为 一个
.
- 显示为 一个
- 换行符 序号是10
- 位于 黑暗森林深处
- 这个换行符
\n
怎么用呢
- 电报信号 本来是 滴答空
- 开始 用电传打字机
- 控制 电报信号收发
- 开始 用电传打字机
- 电传打字机数据 可以存储于纸带上
- 每行 有7个 输入位
- 总共 可以表示128个字符
- 每行 有7个 输入位
- 这就是 ASCII的由来
- 有些字符 我们是能看到的
- 还有些字符 我们看不到
- 比如换行符
\n
- 可以输出这个换行符
\n
吗?🤔 - 我们下次再说!👋