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


    ASCII 码表

    回忆上次内容

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

    小写字母

    #输出a,b,c
    ord("a")
    ord("b")
    ord("c")
    #输出a的相对序号
    ord("a")-ord("a")
    #输出z-a的数字差距,相对序号
    ord("z")-ord("a")
    • a、b、c 这些字符是挨着的
    • 正好从0到25,总共26个🔢
    • 对应数字也是挨着的

    编码规律

    • 从 a-z 应该都是挨着的
    • 26 个英文字母
    • 为什么是从 97 开始?
    • 应该还有别的字符
    • 低头看一下键盘

    • 除了小写字母之外
    • 大写字母
    • 数字
    • 符号
    • 大概有多少个字符呢?

    字符全排列

    • 每一个字符都会对应一个序号
    • 序号用二进制的方式存在字节(byte)中
    • 一个字节(byte)总有8位(bit)
    • 每一位(bit)是一个二进制(binary)数字(digit)

    • 从 ​​8个0​​ 到 ​​8个1​​ 相当于
    • 从 ​​0​​ 到 ​​255​

    • 我想要
    • 把所有可能的序号对应的字符都数一遍
    • 可行么?

    遍历范围

    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="")
    • chr(n)
    • 输出n的字符状态
    • end=""
    • 结束时什么也不输出
    • 不输出默认的换行
    • if n % 16 == 0:
    • print()
    • 如果n能被16整除
    • 那么输出换行

    • 结果如何呢?

    结果

    • 字母和数字还是挺完整的
    • 这套对应关系有没有个名字呢?

    ASCII 码表

    • 当时美国的工程师定义了一套编码规则
    • ​ASCII​
    • ​A​​merican ​​S​​tandard ​​C​​ode for ​​I​​nformation ​​I​​nterchange
    • 美国信息交换标准代码

    • 这建立起了 ​​字符​​ 和 ​​二进制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​
    • 这个小写的 ​​a​​ 在电脑中存储的时候
    • 对应着一个字节
    • 8位2进制数
    • 也就是8位(0或者1)
    • 到底是多少呢?
    • 先沿着下图中1的方向
    • 向上找到​​110​
    • 这是他的高三位
    • ​765​​位

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

    总结

    • 这次我们了解了​​ASCII​​码表
    • ​ASCII​​ 码表就是
    • ​A​​merican ​​S​​tandard ​​C​​ode for ​​I​​nformation ​​I​​nterchange
    • 美国信息交换标准代码
    • ASCII 码表范围
    • ​0x30-0x39​​ 这个范围是 ​​数字​
    • 数字的编码减去 ​​0x30​​ 正好得到数字本身
    • ​0x41-0x5A​​ 这个范围是 ​​大​​ 写字母
    • ​0x61-0x7A​​ 这个范围是 ​​小​​ 写字母
    • ​0x20-0x7F​​ 之间各处零散排布着各种符号

  • 相关阅读:
    简单的布局的初级智能文本提示器
    从零开始,开发一个 Web Office 套件(15):拖动边框,平移编辑器
    mock的使用——生成表格数据并展示
    【ai】李沐 动手深度学学v2 环境安装:anaconda3、pycharm、d2
    Java手写选择排序和算法案例拓展
    【状语从句练习题】主将从现原则
    【问题处理】GIT合并解决冲突后,导致其他人代码遗失的排查
    解析Spring中的循环依赖问题:再探三级缓存(AOP)
    linux内核中断进入过程分析笔记
    蓝桥杯 枚举
  • 原文地址:https://blog.csdn.net/overmind/article/details/127807329