Skip to content

Latest commit

 

History

History
459 lines (333 loc) · 10.2 KB

018-87675-ASCII码表_英文字符编码_键盘字符_ISO_646.sy.md

File metadata and controls

459 lines (333 loc) · 10.2 KB
show version enable_checker
step
1.0
true

ASCII 码表

回忆上次内容

  • ord(c)chr(i)
    • 这是俩函数
    • 这俩函数是一对
      • 相反相成的⚖️
      • ord 通过 字符 找到对应的 序号
      • chr 通过 序号 找到对应的 字符
  • 字符 的本质是 数字序号
    • 每个字符都 对应着 一个数字序号
      • a 对应 97
      • b 对应 98
      • c 对应 99
  • 字母序号连号
    • 好像应该是 天经地义 的
    • 但为什么 小写a 从97开始?
  • 除了 小写字母外
    • 还有 很多字符
      • 都是 如何分布 的呢?🤔

小写字母

  • a、b、c 都是挨着的

图片描述

  • 26个字母都挨着吗?

序号连续

  • 从a开始
  • 到z结束

图片描述

  • 从0到25
    • 总共26个字母
      • 对应序号 是挨着的

编码规律

  • 26个 英文字母
    • 都是挨着的
      • 但 为什么是从 97 开始?
  • 前面 还有 什么别的字符?
    • 低头看一下 键盘

图片描述

  • 除 小写字母 之外
    • 大写字母
    • 数字
    • 符号
  • 都加在一起
    • 大概有 多少个呢?

字符全排列

  • 总共大概 有100个 字符

    • 这些字符 是如何存储呢?
  • 这些字符 存储在字节(byte) 当中

    • 什么是 字节(byte) 呢?

图片描述

  • 一个 字节(byte) 由 8-bit 构成
    • 什么是 bit 呢?

bit

  • bite 咬
    • 咬下来一小片就是bit
    • 小量,小块
    • 一部分

图片描述

  • bait
    • 让鱼咬的东西
      • 鱼饵、诱饵
  • abet
    • 让狗去咬人
      • 教唆
  • bitter
    • 咬到的味道
      • 苦苦的味道
  • beetle
    • 咬人的小虫子
      • 甲壳虫

缩写形式

  • 每一位(bit)是
    • 一个 二进制(binary) 数字(digit)

图片描述

  • 8个08个1 相当于
    • 0255

字节与位

  • 每一个字符
    • 对应一个序号

图片描述

  • 序号 用二进制的方式
    • 存储在 字节(byte)中
      • 一个字节(byte)总有8位(bit)

遍历范围

  • 想要

    • 把 一个字节中 所有的字符
      • 全都 列举一遍
  • 就先要

    • 把 一个字节中
      • 所有的数字序号
        • 全都 列举一遍

图片描述

  • 先键入exit()
    • 从游乐场 退回到 战场

编写程序

  • 键入

    • vi ascii.py
  • i进入插入模式

    • 并开始输入程序

图片描述

  • 这个程序可以运行吗?

运行程序

  • esc

    • 退出插入模式
  • :w|!python3 %

    • 保存
    • 并 用python3 运行当前程序

图片描述

  • 运行程序有什么结果呢?

运行结果

  • 循环范围 是
    • range(2**8)
      • 从0开始 到28结束
      • 也就是 从0到255
      • 也就是
        • 从 全零字节(00000000)2进制
        • 到 全一字节(11111111)2进制
    • 挨个儿 数一遍

图片描述

  • 这下 把一个字节内
    • 所有的数字 挨个数出来了
  • 如何理解这个程序呢?

for循环

  • for循环语句

    • 让 n 循环 起来
      • 循环范围 是range(2**8)
        • 从0到255
  • 注意!

    • 本句 结尾处 有一个冒号(:)
    • 冒号(:) 的意思是
      • 循环开始了
      • 下面缩进的
        • 都是我的循环体

图片描述

  • 第二行
    • 是 循环体
  • 先用Tab
    • 在前面 缩进4个空格
    • 每次 都将n进行输出
  • end=" "
    • 结束符 使用空格
      • 结束时 不输出 换行
        • 输出 一个空格
  • 可以把数字对应的字符输出吗?

对应的字符

  • 通过序号 找到 字符
    • 靠的是 chr函数
  • i进入插入模式
    • 修改程序
      • chr(n)
        • 输出n的字符状态

图片描述

  • esc从插入模式 切换到 正常模式
    • esc 从正常模式 切换到 底行命令模式
      • 方向键 找到上一条命令
        • :w|!python3 %
  • 结果呢?

运行结果

  • 效果比较松散

图片描述

  • 可以紧凑一点吗?

  • 回车后

    • 从 shell 切换回 vim

图片描述

  • 将结束符end
    • 设置为啥也没有
  • 然后运行

紧凑效果

  • 确实够紧凑了
    • 但是字符堆在一行
      • 分不清楚

图片描述

  • 可以尝试换行吗?
    • 我想让每行十六个字符
      • 然后就换行
        • 应该怎么做呢?

尝试换行

  • 需要 对n进行判断
    • 如果 当前循环中
      • n可以被16整除
        • 那么 就输出一个回车
  • i进入插入模式
    • 然后修改代码

图片描述

  • 后面两行程序

    • 是新添加的
  • if n % 16 == 0:

    • 如果 n能 被16整除
      • print()
        • 那么 输出换行

if语句

  • 注意if语句
    • 属于循环体的一部分
    • 也缩进在 for循环的范围内
    • 第2、3、4行 都是
      • 第1行 for循环的 循环体
  • if语句结尾处
    • 要有一个冒号(:)
      • 意味着 下面缩进的
        • 都是if的条件体
  • 下一句print()
    • 是 if条件语句 的 条件体
    • 需要进行更深层的缩进
      • 2个tab
      • 或者 8个空格

图片描述

  • 结果 如何呢?

结果

  • 上面
    • 黑了一大片
      • 好像黑暗丛林

图片描述

  • 下面
    • 字母和数字还是挺完整的
      • 而且还挺连续

图片描述

  • 这套 字符和序号 的 对应关系
    • 有没有名字 呢?

ASCII 码表

  • 这套对应关系
    • 叫做ASCII
    • American Standard Code for Information Interchange
    • 美国信息交换标准代码

图片描述

  • 这 建立起了 字符序号 的 固定映射关系
  • 为什么 要建立 字符序号 的固定映射关系 呢?
  • 字符序号映射关系
    • 如果固定 会如何呢?

映射关系

  • 字符序号对应关系 如果不固定
    • 面对 同一个序号
      • 就会 映射到 不同的字符
        • 就会形成 乱码

图片描述

  • 这套 ascii标准
    • 在 各种计算机系统中 是统一
  • 否则
    • 无法通信
  • 这套 ASCII 映射关系 是什么时候
    • 开始 有的 呢?

初现

  • 1967年
    • 就有了最初这个 ASCII 码表🔡
      • 低电平表示 0
      • 高电平表示 1
      • 电子计算机中所有的数据都是 0 和 1

图片描述

  • 先是 由美国国家标准学会 制定

    • (American National Standard Institute , ANSI )
    • 最早是 美国的 国家标准
      • 被称作 美国信息交换标准代码
  • 美国之外的国家

    • 如何存储基本字符 呢?

国际化

  • 国际标准化组织
  • International Organization for Standardization
    • ISO
  • ISO 将ASCII定为 国际标准
    • 称为 ISO 646 标准

图片描述

  • 最新一次更新 在 1986 年
    • 到目前为止 总共定义了 128个字符
  • 能否完整、系统地看到
    • 整个ascii码表 的 对应关系 呢?

ascii

  • :q
    • 从vim退出
      • 回到shell环境
sudo apt install ascii
  • 下载个ascii程序

图片描述

  • 上面的命令
    • 可以安装 ascii这个应用
      • 如下图所示

图片描述

使用ascii

  • 每一字符 有三个部分组成
    • Dec 对应的是 10 进制数
    • Hex 对应的是 16 进制数
    • 最后一列 对应的是 具体字符或功能

图片描述

  • 字符包括
    • 符号
    • 英文大写字母
    • 英文小写字母
    • 控制字符
  • 这样就把
    • 各种字符 和 二进制数字
      • 对应起来了

解码字符 ASCII

  • 找到小写的a

    • 这个小写的a
    • 在电脑中存储的时候
      • 对应着 一个字节
      • 8位 2进制数
      • 也就是 8位 (0或者1)
  • 到底是多少呢?

  • 先沿着下图中1的方向

    • 向上找到110
    • 这是他的高三位
    • 765

图片描述

  • 再沿着2的方向
    • 向左找到0001
    • 这是他的低四位
    • 4321
    • 在前面加一个0
  • 得到(01100001)2进制

总结

  • 这次 我们了解了ASCII码表
    • ASCII 码表就是
      • American Standard Code for Information Interchange
    • 美国信息交换标准代码
  • ASCII 码表范围
    • 48-57 这个范围是 数字
    • 65-90 这个范围是 写字母
    • 97-122 这个范围是 写字母

图片描述

  • 字符
    • 在计算机当中
      • 是用二进制形式存储的
  • 每个字符
    • 都有自己的字符序号
  • 字符序号 是一个数字
    • 这个数字 用二进制形式 存储在计算机中
      • 可以看看 这个数字的 二进制形态 么?🤔
  • 我们下次再说👋