[oeasy]python0013_ASCII碼表_英文字符編碼_鍵盤字符
ASCII 碼表
回憶上次內(nèi)容
ord(c)
和chr(i)
ord
通過字符
找到對(duì)應(yīng)的數(shù)字
chr
通過數(shù)字
找到對(duì)應(yīng)的字符
這是倆函數(shù)
這倆函數(shù)是一對(duì),相反相成的??
字符
的本質(zhì)是數(shù)字
字符都對(duì)應(yīng)著一些數(shù)字
a
對(duì)應(yīng) 97b
對(duì)應(yīng) 98c
對(duì)應(yīng) 99都連號(hào)好像應(yīng)該是天經(jīng)地義的?
為什么小寫a從97開始?
但除了小寫字母之外還有很多字符
他們都是如何分布的呢???
小寫字母
a、b、c 這些字符是挨著的
正好從0到25,總共26個(gè)??
對(duì)應(yīng)數(shù)字也是挨著的

編碼規(guī)律
從 a-z 應(yīng)該都是挨著的
26 個(gè)英文字母
為什么是從 97 開始?
應(yīng)該還有別的字符
低頭看一下鍵盤

除了小寫字母之外
大寫字母
數(shù)字
符號(hào)
大概有多少個(gè)字符呢?
字符全排列
每一個(gè)字符都會(huì)對(duì)應(yīng)一個(gè)序號(hào)
序號(hào)用二進(jìn)制的方式存在字節(jié)(byte)中
一個(gè)字節(jié)(byte)總有8位(bit)
每一位(bit)是一個(gè)二進(jìn)制(binary)數(shù)字(digit)

從
8個(gè)0
到8個(gè)1
相當(dāng)于從
0
到255

我想要
把所有可能的序號(hào)對(duì)應(yīng)的字符都數(shù)一遍
可行么?
遍歷范圍
for i in range(2 ** 8): ? ?print(i,end=",")遍歷范圍是[0, 28)
也就是[0, 256)
前閉后開
不包含256

我們先把 從0到255 挨排兒捋一遍

如何通過序號(hào)找到對(duì)應(yīng)的字符呢?
對(duì)應(yīng)的字符
通過數(shù)字找到對(duì)應(yīng)的字符是chr
print(chr(n),end="")
結(jié)束時(shí)什么也不輸出
不輸出默認(rèn)的換行
輸出n的字符狀態(tài)
chr(n)
end=""
if n % 16 == 0:
print()
如果n能被16整除
那么輸出換行

結(jié)果如何呢?
結(jié)果

字母和數(shù)字還是挺完整的
這套對(duì)應(yīng)關(guān)系有沒有個(gè)名字呢?
ASCII 碼表
當(dāng)時(shí)美國(guó)的工程師定義了一套編碼規(guī)則
A
mericanS
tandardC
ode forI
nformationI
nterchangeASCII
美國(guó)信息交換標(biāo)準(zhǔn)代碼

這建立起了
字符
和二進(jìn)制01
的映射關(guān)系
面對(duì)同一個(gè)二進(jìn)制數(shù) 01010101
就會(huì)映射到不同的字符
人們看到不同的字符就認(rèn)為是亂碼
字符
和二進(jìn)制數(shù)
的映射關(guān)系
如果不一致這套ascii標(biāo)準(zhǔn)在各種計(jì)算機(jī)系統(tǒng)中需要統(tǒng)一
否則無法通信
這個(gè) ASCII 什么時(shí)候開始有的呢?
初現(xiàn)
1967 年的時(shí)候就有了最初這個(gè) ASCII 碼表??
低電平表示 0
高電平表示 1
電子計(jì)算機(jī)中所有的數(shù)據(jù)都是 0 和 1
當(dāng)時(shí)計(jì)算機(jī)

先是由美國(guó)國(guó)家標(biāo)準(zhǔn)學(xué)會(huì)制定
(American National Standard Institute , ANSI )
最初是美國(guó)的國(guó)家標(biāo)準(zhǔn)
被稱作美國(guó)信息交換標(biāo)準(zhǔn)代碼
美國(guó)之外的國(guó)家如何編碼基本字符呢?
國(guó)際化
后來是國(guó)際標(biāo)準(zhǔn)化組織定為國(guó)際標(biāo)準(zhǔn)ISO
International Organization for Standardization a.k.a. ISO
稱為 ISO 646 標(biāo)準(zhǔn)

最后一次更新則是在 1986 年
到目前為止共定義了 128 個(gè)字符
能否完整系統(tǒng)地看到整個(gè)ascii碼表的對(duì)應(yīng)關(guān)系呢?
ascii
我們先來下個(gè)ascii程序
上面的命令可以安裝ascii這個(gè)應(yīng)用

使用ascii
每一字符有三個(gè)部分組成
Dec 對(duì)應(yīng)的是 10 進(jìn)制數(shù)
Hex 對(duì)應(yīng)的是 16 進(jìn)制數(shù)
最后一列 對(duì)應(yīng)的是 具體字符或功能

字符包括
控制
符號(hào)
英文大寫字母
英文小寫字母
這樣就把各種字符和一個(gè)二進(jìn)制數(shù)字對(duì)應(yīng)起來了
解碼 ASCII
我們找到小寫的
a
8位2進(jìn)制數(shù)
也就是8位(0或者1)
這個(gè)小寫的
a
在電腦中存儲(chǔ)的時(shí)候對(duì)應(yīng)著一個(gè)字節(jié)
到底是多少呢?
先沿著下圖中1的方向
向上找到
110
這是他的高三位
765
位

再沿著2的方向
在前面加一個(gè)
0
得到(
01100001
)2進(jìn)制
向左找到
0001
這是他的低四位
4321
位
總結(jié)
這次我們了解了
ASCII
碼表A
mericanS
tandardC
ode forI
nformationI
nterchangeASCII
碼表就是美國(guó)信息交換標(biāo)準(zhǔn)代碼
ASCII 碼表范圍
數(shù)字的編碼減去
0x30
正好得到數(shù)字本身0x30-0x39
這個(gè)范圍是數(shù)字
0x41-0x5A
這個(gè)范圍是大
寫字母0x61-0x7A
這個(gè)范圍是小
寫字母0x20-0x7F
之間各處零散排布著各種符號(hào)

字符在計(jì)算機(jī)當(dāng)中是用二進(jìn)制方式存儲(chǔ)的
我們現(xiàn)在可以得到字符的序號(hào)
但是能通過字符序號(hào)
得到字符的二進(jìn)制形態(tài)么???
我們下次再說??
藍(lán)橋->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