欢迎光临散文网 会员登陆 & 注册

[oeasy]python0013_ASCII码表_英文字符编码_键盘字符

2022-11-11 15:43 作者:oeasy  | 我要投稿

ASCII 码表

回忆上次内容

  • ord(c)chr(i)

    • ord 通过 字符 找到对应的 数字

    • chr 通过 数字 找到对应的 字符

    • 这是俩函数

    • 这俩函数是一对,相反相成的⚖️

    • 字符 的本质是 数字

  • 字符都对应着一些数字

    • a 对应 97

    • b 对应 98

    • c 对应 99

  • 都连号好像应该是天经地义的?

    • 为什么小写a从97开始?

    • 但除了小写字母之外还有很多字符

    • 他们都是如何分布的呢?🤔

小写字母


  • a、b、c 这些字符是挨着的

  • 正好从0到25,总共26个🔢

  • 对应数字也是挨着的

编码规律

  • 从 a-z 应该都是挨着的

    • 26 个英文字母

  • 为什么是从 97 开始?

    • 应该还有别的字符

  • 低头看一下键盘

  • 除了小写字母之外

    • 大写字母

    • 数字

    • 符号

  • 大概有多少个字符呢?

字符全排列

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

    • 序号用二进制的方式存在字节(byte)中

    • 一个字节(byte)总有8位(bit)

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

  • 8个08个1 相当于

    • 0255

  • 我想要

    • 把所有可能的序号对应的字符都数一遍

    • 可行么?

遍历范围

for i in range(2 ** 8):    print(i,end=",")
  • 遍历范围是[0, 28)

    • 也就是[0, 256)

    • 前闭后开

    • 不包含256

  • 我们先把 从0到255 挨排儿捋一遍

  • 如何通过序号找到对应的字符呢?

对应的字符

  • 通过数字找到对应的字符是chr

for n in range(255):    print(chr(n),end="")    if n % 16 == 0:        print()
  • print(chr(n),end="")

    • 结束时什么也不输出

    • 不输出默认的换行

    • 输出n的字符状态

    • chr(n)

    • end=""

  • if n % 16 == 0:

    • print()

    • 如果n能被16整除

    • 那么输出换行

  • 结果如何呢?

结果

  • 字母和数字还是挺完整的

  • 这套对应关系有没有个名字呢?

ASCII 码表

  • 当时美国的工程师定义了一套编码规则

    • American Standard Code for Information Interchange

    • ASCII

    • 美国信息交换标准代码

  • 这建立起了 字符二进制01映射关系

    • 面对同一个二进制数 01010101

    • 就会映射到不同的字符

    • 人们看到不同的字符就认为是乱码

    • 字符二进制数映射关系 如果不一致

  • 这套ascii标准在各种计算机系统中需要统一

  • 否则无法通信

  • 这个 ASCII 什么时候开始有的呢?

初现

  • 1967 年的时候就有了最初这个 ASCII 码表🔡

    • 低电平表示 0

    • 高电平表示 1

    • 电子计算机中所有的数据都是 0 和 1

    • 当时计算机

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

    • (American National Standard Institute , ANSI )

    • 最初是美国的国家标准

    • 被称作美国信息交换标准代码

  • 美国之外的国家如何编码基本字符呢?

国际化

  • 后来是国际标准化组织定为国际标准ISO

    • International Organization for Standardization a.k.a. ISO

    • 称为 ISO 646 标准

  • 最后一次更新则是在 1986 年

    • 到目前为止共定义了 128 个字符

  • 能否完整系统地看到整个ascii码表的对应关系呢?

ascii

  • 我们先来下个ascii程序

sudo apt install ascii
  • 上面的命令可以安装ascii这个应用

使用ascii

  • 每一字符有三个部分组成

    • Dec 对应的是 10 进制数

    • Hex 对应的是 16 进制数

    • 最后一列 对应的是 具体字符或功能

  • 字符包括

    • 控制

    • 符号

    • 英文大写字母

    • 英文小写字母

  • 这样就把各种字符和一个二进制数字对应起来了

解码 ASCII

  • 我们找到小写的a

    • 8位2进制数

    • 也就是8位(0或者1)

    • 这个小写的 a 在电脑中存储的时候

    • 对应着一个字节

  • 到底是多少呢?

  • 先沿着下图中1的方向

    • 向上找到110

    • 这是他的高三位

    • 765

  • 再沿着2的方向

    • 在前面加一个0

    • 得到(01100001)2进制

    • 向左找到0001

    • 这是他的低四位

    • 4321

总结

  • 这次我们了解了ASCII码表

    • American Standard Code for Information Interchange

    • ASCII 码表就是

    • 美国信息交换标准代码

  • ASCII 码表范围

    • 数字的编码减去 0x30 正好得到数字本身

    • 0x30-0x39 这个范围是 数字

    • 0x41-0x5A 这个范围是 写字母

    • 0x61-0x7A 这个范围是 写字母

    • 0x20-0x7F 之间各处零散排布着各种符号

  • 字符在计算机当中是用二进制方式存储的

  • 我们现在可以得到字符的序号

  • 但是能通过字符序号

  • 得到字符的二进制形态么?🤔

  • 我们下次再说👋

  • 蓝桥->https://www.lanqiao.cn/teacher/3584

  • github->https://github.com/overmind1980/oeasy-python-tutorial

  • gitee->https://gitee.com/overmind1980/oeasypython

  • 视频->https://www.bilibili.com/video/BV1CU4y1Z7gQ 作者:oeasy


[oeasy]python0013_ASCII码表_英文字符编码_键盘字符的评论 (共 条)

分享到微博请遵守国家法律