ASCII 码对照表
ASCII(American Standard Code for Information Interchange)是美国信息交换标准代码,包含 128 个字符(0-127),其中 0-31 和 127 为控制字符,32-126 为可打印字符。
原理解析
ASCII(American Standard Code for Information Interchange,美国信息交换标准代码)用 7 个比特表示字符,共 0–127 个码位,是早期计算机字符编码的事实标准。其中 0–31 与 127 是控制字符(如换行 LF、制表 TAB、回车 CR),32–126 是可打印字符(字母、数字、标点)。
由于 7 位只能覆盖英文字符,扩展 ASCII 用第 8 位把范围扩到 128–255,但这一段没有统一标准,Windows-1252、ISO-8859-1 等各 locale 解释不同,跨系统直接传二进制文本常因此出现乱码。
什么时候该查这张表
这张表在你要把「字符 ↔ 码点 ↔ 字节」三者对应起来时有用。排查乱码、验证编码转换、核对协议里的控制字符编号,都要用它。但判断该用哪张表有个前提问题:如果你的目标是「人类可读的文字」,编码方案(UTF-8 / GBK / Shift-JIS)比码点更能决定结果;如果目标是「字节流」,才回到这张 ASCII 表。
不该查的情况:你在处理中文、日文、emoji。这张表覆盖的是 0–127 的 7 位范围,128 以上属于扩展区,各编码解释不同,用 ASCII 表推导非 ASCII 字符的字节一定会错。这类问题应去「字符编码」页确认编码方案,而不是在这里查码点。
判断标准很简单:数字落在 0–127 且你需要知道「这个字节代表什么」时查本表;数字超过 127 时,先确定编码方案,再谈码点。混用这两层是把 UTF-8 的多字节序列当成多个独立字符的最常见来源。
另一个不该查的信号:你只是想判断字符串长度。注意「字符数」「字节数」「码点数」是三个不同的量——ASCII 范围内三者相等,超出后差异极大,emoji 通常一个字符占 2 个码点、4 个 UTF-8 字节。
边界与常见陷阱
控制字符的编号会因方言而异
0–31 与 127 是控制区,但「哪个编号对应哪个动作」在不同方言里不一致:ASCII 传统把 7 bell、8 backspace、9 tab、10 line feed、13 carriage return,而 Windows 终端把 backspace 做成 8、把换行做成 13+10 两字节序列。跨系统写协议时不能假设「10 就是换行」,要明确对方按哪种约定解释。
「扩展 ASCII」不是标准
128–255 这段常被称为扩展 ASCII,但它没有统一标准:ISO-8859-1(Latin-1)与 Windows-1252 只在 0x80-0x9F 一段不同,而这个恰好是控制字符与可打印字符的分界,把两者混用会出现「本该不可见的位置显示成图形字符」。这正是很多老系统在意大利语区出现怪字符的原因。
码点不等于字形,同一码点可有多个字符
Unicode 的基本平面里有大量码点专门用来与现有字符做视觉匹配,其中 494 个「compatibility characters」在正规化时会被等价替换。例如 U+2126 OHM SIGN 规范化为 U+03A9 GREEK CAPITAL OMEGA,U+FB01 的 fi 连字会展开成两个字母。做字符串精确比较、去重或校验时,不做正规化会把视觉相同的字符串判为不同。
十六进制与十进制混用是最常见的转换错误
码点 0x41 与 65 指的是同一个字符 A。写代码时把本该十六进制的值当十进制(或反之),得到的字符完全无关且不报错——因为值本身在 JS 里是合法数字。核对办法是看字符串长度:ASCII 可打印字符在 0x20-0x7E,若出现超出这个范围的十进制数,就说明有一处混用了。
与相邻内容的分工
要查 GBK / Big5 / Shift-JIS / UTF-8 的字节结构与转换关系,用站内「字符编码」页;本页只覆盖 0–127 的 7 位基础范围。
要查 Emoji 与符号的码点、名称和搜索,用站内「Emoji 速查」页,它按码点而非十进制组织。
要处理 URL 里的百分号编码(如 %20、%E4%B8%AD),那是 UTF-8 字节的十六进制表示,与本页的字符码点不是同一层,用站内「URL 编码」相关工具。
若目的是排查线上乱码,字符编码页的「写出的编码与读出时声称的编码不一致」一节比查码点表更能定位问题。
实战片段
要点:① [...s] 用码点计数而 s.length 用 UTF-16 计数单位,emoji 会被算成 2 —— 限制字符串长度时两者结论完全不同;② TextEncoder 按标准给 UTF-8 字节数,与目标编码无关,若实际是 GBK 则需另算;③ 取码点用 codePointAt 与 String.fromCodePoint 成对使用,不要用 charCodeAt,它在代理对上只返回前半。
// 字符串的三个长度:字符 / 码点 / UTF-8 字节
const s = 'A中🛠'
// ① 码点数(用 [...s] 而非 s.length,emoji 会被算成 2)
const codePoints = [...s].length
// ② UTF-8 字节数(TextEncoder 按标准编码,中文 3 字节、emoji 4 字节)
const bytes = new TextEncoder().encode(s).length
// ③ 各层长度对照 —— ASCII 范围内三者一致,超出后迅速发散
console.log({ charLength: s.length, codePoints, bytes })
// 码点 ↔ 字符:用 codePointAt 而非 charCodeAt(后者取不到代理对的后半)
const back = String.fromCodePoint(0x1f6e0) // 🛠
const cp = back.codePointAt(0)
/* 典型结果:
{ charLength: 5, codePoints: 3, bytes: 8 }
charLength 用 UTF-16 计数单位,中文 1、emoji 2,所以是 5;
码点 3('A'、'中'、'🛠');UTF-8 字节 1+3+4 = 8。
⇒ 涉及长度上限(DB 字段、协议头)时必须明确用哪一种口径。 */实践注解
- 0x0D 0x0A 与 0x0A 的换行差异会造成「多一个空行」Windows 文本用 CRLF(13,10),Unix 用 LF(10)。把 Windows 文件当 Unix 读取时每行尾会多出 \r,表现为正则 $ 不匹配、比较字符串时不相等。跨平台处理应先统一换行。
- 控制字符在 JSON/URL 中必须转义0–31 的码位在 JSON 里要写成 \u0000–\u001f,在 URL 里要百分号编码(制表符是 %09)。直接内联会让解析器报错或截断消息,日志采集时尤其常见。
- DEL(127)不是可打印字符它属于控制字符区,终端里通常不可见,但会占用一个字节。做「可见字符数」统计时若不排除 0–31 与 127,长度会偏大;做输入校验时也应显式拒绝这些码位。
数据来源
- ANSI X3.4-1986
- ISO/IEC 646
- Unicode Standard (C0/C1 controls)
上述编号、名称与定义均来自公开规范,本站不主张对规范数据本身的独创性;本页的编排方式、中文释义与实践注解由本站撰写。
| 十进制 | 十六进制 | 字符 | 英文名称 | 中文名称 |
|---|---|---|---|---|
| 0 | 0x00 | NUL | Null | 空字符 |
| 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 | 响铃 |
| 8 | 0x08 | BS | Backspace | 退格 |
| 9 | 0x09 | HT | Horizontal Tab | 水平制表 |
| 10 | 0x0A | LF | Line Feed | 换行 |
| 11 | 0x0B | VT | Vertical Tab | 垂直制表 |
| 12 | 0x0C | FF | Form Feed | 换页 |
| 13 | 0x0D | CR | Carriage Return | 回车 |
| 14 | 0x0E | SO | Shift Out | 移出 |
| 15 | 0x0F | SI | Shift In | 移入 |
| 16 | 0x10 | DLE | Data Link Escape | 数据链路转义 |
| 17 | 0x11 | DC1 | Device Control 1 | 设备控制1 |
| 18 | 0x12 | DC2 | Device Control 2 | 设备控制2 |
| 19 | 0x13 | DC3 | Device Control 3 | 设备控制3 |
| 20 | 0x14 | DC4 | Device Control 4 | 设备控制4 |
| 21 | 0x15 | NAK | Negative Acknowledge | 否定确认 |
| 22 | 0x16 | SYN | Synchronous Idle | 同步空闲 |
| 23 | 0x17 | ETB | End of Trans. Block | 传输块结束 |
| 24 | 0x18 | CAN | Cancel | 取消 |
| 25 | 0x19 | EM | End of Medium | 介质结束 |
| 26 | 0x1A | SUB | Substitute | 替换 |
| 27 | 0x1B | ESC | Escape | 转义 |
| 28 | 0x1C | FS | File Separator | 文件分隔符 |
| 29 | 0x1D | GS | Group Separator | 组分隔符 |
| 30 | 0x1E | RS | Record Separator | 记录分隔符 |
| 31 | 0x1F | US | Unit Separator | 单元分隔符 |
| 32 | 0x20 | SP | Space | 空格 |
| 33 | 0x21 | ! | Exclamation Mark | 感叹号 |
| 34 | 0x22 | " | Quotation Mark | 双引号 |
| 35 | 0x23 | # | Number Sign | 井号 |
| 36 | 0x24 | $ | Dollar Sign | 美元符号 |
| 37 | 0x25 | % | Percent Sign | 百分号 |
| 38 | 0x26 | & | Ampersand | 与号 |
| 39 | 0x27 | ' | Apostrophe | 单引号 |
| 40 | 0x28 | ( | Left Parenthesis | 左括号 |
| 41 | 0x29 | ) | Right Parenthesis | 右括号 |
| 42 | 0x2A | * | Asterisk | 星号 |
| 43 | 0x2B | + | Plus Sign | 加号 |
| 44 | 0x2C | , | Comma | 逗号 |
| 45 | 0x2D | - | Hyphen | 连字符 |
| 46 | 0x2E | . | Period | 句点 |
| 47 | 0x2F | / | Slash | 斜杠 |
| 48 | 0x30 | 0 | Digit Zero | 数字 0 |
| 49 | 0x31 | 1 | 1 | 1 |
| 50 | 0x32 | 2 | 2 | 2 |
| 51 | 0x33 | 3 | 3 | 3 |
| 52 | 0x34 | 4 | 4 | 4 |
| 53 | 0x35 | 5 | 5 | 5 |
| 54 | 0x36 | 6 | 6 | 6 |
| 55 | 0x37 | 7 | 7 | 7 |
| 56 | 0x38 | 8 | 8 | 8 |
| 57 | 0x39 | 9 | Digit Nine | 数字 9 |
| 58 | 0x3A | : | : | : |
| 59 | 0x3B | ; | ; | ; |
| 60 | 0x3C | < | < | < |
| 61 | 0x3D | = | = | = |
| 62 | 0x3E | > | > | > |
| 63 | 0x3F | ? | ? | ? |
| 64 | 0x40 | @ | @ | @ |
| 65 | 0x41 | A | Uppercase A | 大写 A |
| 66 | 0x42 | B | B | B |
| 67 | 0x43 | C | C | C |
| 68 | 0x44 | D | D | D |
| 69 | 0x45 | E | E | E |
| 70 | 0x46 | F | F | F |
| 71 | 0x47 | G | G | G |
| 72 | 0x48 | H | H | H |
| 73 | 0x49 | I | I | I |
| 74 | 0x4A | J | J | J |
| 75 | 0x4B | K | K | K |
| 76 | 0x4C | L | L | L |
| 77 | 0x4D | M | M | M |
| 78 | 0x4E | N | N | N |
| 79 | 0x4F | O | O | O |
| 80 | 0x50 | P | P | P |
| 81 | 0x51 | Q | Q | Q |
| 82 | 0x52 | R | R | R |
| 83 | 0x53 | S | S | S |
| 84 | 0x54 | T | T | T |
| 85 | 0x55 | U | U | U |
| 86 | 0x56 | V | V | V |
| 87 | 0x57 | W | W | W |
| 88 | 0x58 | X | X | X |
| 89 | 0x59 | Y | Y | Y |
| 90 | 0x5A | Z | Uppercase Z | 大写 Z |
| 91 | 0x5B | [ | [ | [ |
| 92 | 0x5C | \ | \ | \ |
| 93 | 0x5D | ] | ] | ] |
| 94 | 0x5E | ^ | ^ | ^ |
| 95 | 0x5F | _ | _ | _ |
| 96 | 0x60 | ` | ` | ` |
| 97 | 0x61 | a | Lowercase a | 小写 a |
| 98 | 0x62 | b | b | b |
| 99 | 0x63 | c | c | c |
| 100 | 0x64 | d | d | d |
| 101 | 0x65 | e | e | e |
| 102 | 0x66 | f | f | f |
| 103 | 0x67 | g | g | g |
| 104 | 0x68 | h | h | h |
| 105 | 0x69 | i | i | i |
| 106 | 0x6A | j | j | j |
| 107 | 0x6B | k | k | k |
| 108 | 0x6C | l | l | l |
| 109 | 0x6D | m | m | m |
| 110 | 0x6E | n | n | n |
| 111 | 0x6F | o | o | o |
| 112 | 0x70 | p | p | p |
| 113 | 0x71 | q | q | q |
| 114 | 0x72 | r | r | r |
| 115 | 0x73 | s | s | s |
| 116 | 0x74 | t | t | t |
| 117 | 0x75 | u | u | u |
| 118 | 0x76 | v | v | v |
| 119 | 0x77 | w | w | w |
| 120 | 0x78 | x | x | x |
| 121 | 0x79 | y | y | y |
| 122 | 0x7A | z | Lowercase z | 小写 z |
| 123 | 0x7B | { | { | { |
| 124 | 0x7C | | | | | | |
| 125 | 0x7D | } | } | } |
| 126 | 0x7E | ~ | ~ | ~ |
| 127 | 0x7F | DEL | Delete | 删除 |
常见问题
什么是 ASCII?
ASCII(美国信息交换标准代码)用 7 位二进制表示 128 个字符,包括英文字母、数字、标点与控制字符,是计算机最基础的字符编码。
ASCII 和 Unicode 有什么关系?
ASCII 仅覆盖 128 个字符;Unicode 是其超集,兼容 ASCII 前 128 个码点并扩展到全球文字。UTF-8 是一种 ASCII 兼容的 Unicode 编码。
什么是控制字符?
码点 0-31 与 127 为控制字符(如换行 LF、回车 CR、制表 Tab),不可打印,用于设备控制与文本格式。
为什么常用十六进制表示 ASCII?
十六进制比二进制/十进制更紧凑易读(0x41 = "A"),在调试协议、解析报文时最常用。
怎么查某个字符的 ASCII 码?
在上方对照表中按"字符"列找到目标字符,其左侧"十进制"即为该字符的 ASCII 码,"十六进制"为对应的十六进制值。例如字符 "A" 的十进制 ASCII 码是 65(0x41),空格(SP)是 32(0x20),换行(LF)是 10(0x0A)。