ASCII(美国信息交换标准代码)完整介绍与教程
维基百科页面:https://zh.wikipedia.org/wiki/ASCII
ASCII 全称 American Standard Code for Information Interchange,中文:美国信息交换标准代码,是计算机历史上最重要的字符编码,也是 Unicode 的基础。
一、基础概念
- 诞生历史
1963年起草,1967年正式发布,最后一次修订1986年;被采纳为国际标准 ISO‑646。
原始为 7位编码,27=128,一共128个码点,编号范围:十进制 0‑127。
计算机存储是字节(8bit),标准ASCII把最高位固定填0,占用1字节。
- 两类字符
- 控制字符:0‑31、127,共33个,不可打印:用于老式打印机、终端设备,如换行、回车、制表符;大部分现在已经废弃,LF换行、CR回车、Tab制表仍广泛使用。
- 可打印字符:32‑126,共95个:空格、数字、大小写英文字母、标点符号。
关键码段(十进制)
十进制范围 内容 32 空格 Space 48‑57 数字 0‑965‑90 大写字母 A‑Z97‑122 小写字母 a‑z
记忆规律:大写A=65,小写a=97;大小写相差32。例如
A(65)+32 = a(97),编程中大小写转换经常用到这个特性。
- 扩展ASCII(8位ASCII)
把8位全部启用,码点 0‑255,多出128个字符。但没有统一标准,不同国家有不同版本(如Windows‑1252),兼容性差,现在基本被Unicode取代。
二、常用控制字符简表(部分)
| 十进制 | 十六进制 | 名称 | 作用 |
|---|---|---|---|
| 0 | 0x00 | NUL 空字符 | 字符串结束标记(C语言) |
| 9 | 0x09 | Tab 水平制表符 | \t 制表缩进 |
| 10 | 0x0A | LF 换行 Line Feed | \n Unix/Linux换行 |
| 13 | 0x0D | CR 回车 Carriage Return | \r Windows换行 \r\n |
| 127 | 0x7F | DEL 删除 | 老式终端删除字符 |
三、ASCII实操教程(编程示例)
Python示例
# 字符转ASCII码 ord()
print(ord('A')) # 输出65
print(ord('a')) # 输出97
print(ord('0')) # 输出48
# ASCII码转回字符 chr()
print(chr(65)) # 输出'A'
print(chr(97)) # 输出'a'
# 大小写转换:利用差值32
upper_char = 'B'
lower_char = chr(ord(upper_char)+32)
print(lower_char) # b
C语言示例
#include <stdio.h>
int main(){
char ch = 'A';
printf("%d\n", ch); // 输出65,char本质就是ASCII数值
return 0;
}
四、重要特性与局限
- ✅ 优点
- 简单,每个字符占1字节;
- Unicode前128个码点完全复刻ASCII,所有现代文本编码兼容ASCII;
- 网络、协议、编程语言语法的底层基础。
- ❌ 局限
- 只支持英文、基础符号,没有中文、日文、重音字母;
- 扩展ASCII没有统一标准,不同系统乱码;
- 现代多语言场景必须使用 UTF‑8/Unicode。
UTF‑8 巧妙设计:ASCII字符在UTF‑8中仍然只用1个字节,和ASCII完全一致,这也是ASCII至今仍在发挥作用的原因。
五、常见易错点
- 数字字符
'0'的ASCII是48,不是0;字符数字和整型数字要区分。 - Windows换行是
\r\n(CR+LF),Linux/macOS是\n(LF),根源来自ASCII控制字符。 - 空格不是0,空格十进制是32。
六、ASCII码排序规则(字符串比较底层逻辑)
空格 < 数字0‑9 < 大写A‑Z < 小写a‑z
举例:'9' < 'A','Z' < 'a'。很多编程语言字符串大小比较就是直接对比ASCII数值。
如果你需要,我可以输出完整128位ASCII全表,或者讲解ASCII和UTF‑8、GB2312的区别。
标准 ASCII 128 码完整表(0 ~ 127,7位ASCII)
Dec:十进制 | Hex:十六进制 | 缩写/符号 | 名称/说明
0–31、127:控制字符(不可打印);32–126:可打印字符
| Dec | Hex | 符号/缩写 | 说明 |
|---|---|---|---|
| 0 | 0x00 | NUL | Null 空字符,C语言字符串结束符 |
| 1 | 0x01 | SOH | Start of Heading 标题开始 |
| 2 | 0x02 | STX | Start of Text 正文开始 |
| 3 | 0x03 | ETX | End of Text 正文结束 |
| 4 | 0x04 | EOT | End of Transmission 传输结束 |
| 5 | 0x05 | ENQ | Enquiry 请求 |
| 6 | 0x06 | ACK | Acknowledge 确认 |
| 7 | 0x07 | BEL | Bell 响铃,\a |
| 8 | 0x08 | BS | Backspace 退格,\b |
| 9 | 0x09 | TAB | Horizontal Tab 水平制表符,\t |
| 10 | 0x0A | LF | Line Feed 换行,\n(Unix换行) |
| 11 | 0x0B | VT | Vertical Tab 垂直制表 |
| 12 | 0x0C | FF | Form Feed 换页,\f |
| 13 | 0x0D | CR | Carriage Return 回车,\r(Windows换行 \r\n) |
| 14 | 0x0E | SO | Shift Out 移出 |
| 15 | 0x0F | SI | Shift In 移入 |
| 16 | 0x10 | DLE | Data Link Escape 数据链路转义 |
| 17 | 0x11 | DC1 | Device Control 1 设备控制1(XON) |
| 18 | 0x12 | DC2 | Device Control 2 设备控制2 |
| 19 | 0x13 | DC3 | Device Control 3 设备控制3(XOFF) |
| 20 | 0x14 | DC4 | Device Control 4 设备控制4 |
| 21 | 0x15 | NAK | Negative Acknowledge 否定确认 |
| 22 | 0x16 | SYN | Synchronous Idle 同步空闲 |
| 23 | 0x17 | ETB | End of Transmission Block 传输块结束 |
| 24 | 0x18 | CAN | Cancel 取消 |
| 25 | 0x19 | EM | End of Medium 介质结束 |
| 26 | 0x1A | SUB | Substitute 替换 |
| 27 | 0x1B | ESC | Escape 转义字符,\e |
| 28 | 0x1C | FS | File Separator 文件分隔符 |
| 29 | 0x1D | GS | Group Separator 组分隔符 |
| 30 | 0x1E | RS | Record Separator 记录分隔符 |
| 31 | 0x1F | US | Unit Separator 单元分隔符 |
| 32 | 0x20 | (space) | 空格 |
| 33 | 0x21 | ! | 感叹号 |
| 34 | 0x22 | " | 双引号 |
| 35 | 0x23 | # | 井号 |
| 36 | 0x24 | $ | 美元符号 |
| 37 | 0x25 | % | 百分号 |
| 38 | 0x26 | & | 和号 |
| 39 | 0x27 | ' | 单引号 |
| 40 | 0x28 | ( | 左括号 |
| 41 | 0x29 | ) | 右括号 |
| 42 | 0x2A | * | 星号 |
| 43 | 0x2B | + | 加号 |
| 44 | 0x2C | , | 逗号 |
| 45 | 0x2D | - | 减号/连字符 |
| 46 | 0x2E | . | 句点 |
| 47 | 0x2F | / | 斜杠 |
| 48 | 0x30 | 0 | 数字0 |
| 49 | 0x31 | 1 | 数字1 |
| 50 | 0x32 | 2 | 数字2 |
| 51 | 0x33 | 3 | 数字3 |
| 52 | 0x34 | 4 | 数字4 |
| 53 | 0x35 | 5 | 数字5 |
| 54 | 0x36 | 6 | 数字6 |
| 55 | 0x37 | 7 | 数字7 |
| 56 | 0x38 | 8 | 数字8 |
| 57 | 0x39 | 9 | 数字9 |
| 58 | 0x3A | : | 冒号 |
| 59 | 0x3B | ; | 分号 |
| 60 | 0x3C | < | 小于号 |
| 61 | 0x3D | = | 等号 |
| 62 | 0x3E | > | 大于号 |
| 63 | 0x3F | ? | 问号 |
| 64 | 0x40 | @ | @符号 |
| 65 | 0x41 | A | 大写A |
| 66 | 0x42 | B | 大写B |
| 67 | 0x43 | C | 大写C |
| 68 | 0x44 | D | 大写D |
| 69 | 0x45 | E | 大写E |
| 70 | 0x46 | F | 大写F |
| 71 | 0x47 | G | 大写G |
| 72 | 0x48 | H | 大写H |
| 73 | 0x49 | I | 大写I |
| 74 | 0x4A | J | 大写J |
| 75 | 0x4B | K | 大写K |
| 76 | 0x4C | L | 大写L |
| 77 | 0x4D | M | 大写M |
| 78 | 0x4E | N | 大写N |
| 79 | 0x4F | O | 大写O |
| 80 | 0x50 | P | 大写P |
| 81 | 0x51 | Q | 大写Q |
| 82 | 0x52 | R | 大写R |
| 83 | 0x53 | S | 大写S |
| 84 | 0x54 | T | 大写T |
| 85 | 0x55 | U | 大写U |
| 86 | 0x56 | V | 大写V |
| 87 | 0x57 | W | 大写W |
| 88 | 0x58 | X | 大写X |
| 89 | 0x59 | Y | 大写Y |
| 90 | 0x5A | Z | 大写Z |
| 91 | 0x5B | [ | 左方括号 |
| 92 | 0x5C | \ | 反斜杠(转义符) |
| 93 | 0x5D | ] | 右方括号 |
| 94 | 0x5E | ^ | 脱字符 |
| 95 | 0x5F | _ | 下划线 |
| 96 | 0x60 | ` | 反引号 |
| 97 | 0x61 | a | 小写a |
| 98 | 0x62 | b | 小写b |
| 99 | 0x63 | c | 小写c |
| 100 | 0x64 | d | 小写d |
| 101 | 0x65 | e | 小写e |
| 102 | 0x66 | f | 小写f |
| 103 | 0x67 | g | 小写g |
| 104 | 0x68 | h | 小写h |
| 105 | 0x69 | i | 小写i |
| 106 | 0x6A | j | 小写j |
| 107 | 0x6B | k | 小写k |
| 108 | 0x6C | l | 小写l |
| 109 | 0x6D | m | 小写m |
| 110 | 0x6E | n | 小写n |
| 111 | 0x6F | o | 小写o |
| 112 | 0x70 | p | 小写p |
| 113 | 0x71 | q | 小写q |
| 114 | 0x72 | r | 小写r |
| 115 | 0x73 | s | 小写s |
| 116 | 0x74 | t | 小写t |
| 117 | 0x75 | u | 小写u |
| 118 | 0x76 | v | 小写v |
| 119 | 0x77 | w | 小写w |
| 120 | 0x78 | x | 小写x |
| 121 | 0x79 | y | 小写y |
| 122 | 0x7A | z | 小写z |
| 123 | 0x7B | { | 左大括号 |
| 124 | 0x7C | | | 竖线 |
| 125 | 0x7D | } | 右大括号 |
| 126 | 0x7E | ~ | 波浪号 |
| 127 | 0x7F | DEL | Delete 删除字符,不可打印 |
Python一键打印整张ASCII表代码
for dec in range(128):
hx = hex(dec)
ch = chr(dec)
if dec < 32 or dec == 127:
char_str = "[控制字符]"
else:
char_str = ch
print(f"Dec:{dec:3d} Hex:{hx:4s} 字符:{char_str}")
需要我把这个表格导出为纯Markdown无格式版本,方便直接复制到Obsidian吗?