HandyTools Hub

ASCII 码表

浏览所有 128 个 ASCII 字符及其代码

十进制 十六进制 八进制 二进制 字符 名称

ASCII Table 是一份可交互的对照表,收录 7 位美国信息交换标准代码(ASCII)的全部 128 个字符。每一行都给出字符的十进制、十六进制、八进制和二进制值,以及它的名称。它正是为那些你需要立刻确认「空格是 32」「A 是 65」「到底是哪个码值在悄悄弄坏我的解析器」的时刻准备的,不必再打开某个语言的运行时去查。

使用方法

全部 128 行可以滚动浏览,顶部的分类筛选器能把表格收窄到控制字符、数字、大写字母、小写字母或标点。搜索框接受任意一种已展示进制下的数值、像 ESC 这样的控制字符名,或者像 A 这样的字面字符。

  • 输入 65 跳到大写字母 A。
  • 输入 41 按十六进制找到同一个字符。
  • 输入 NL 或 LF 找到换行符。
  • 选择 control 筛选,只看 0-31 和 127。

搜索结果保持表格原有顺序,所以搜索是「高亮」而不是「重排」。

如何读懂一行

每行有六列。以大写字母 A 为例:

字段值
字符A
十进制65
十六进制41
八进制101
二进制1000001
分类大写字母

另外几行也很常用:

字符十进制十六进制八进制二进制
(空格)32200400100000
a97611411100001
LF100A0120001010

大小写之间的关系值得记牢:小写字母正好比对应的大写字母大 32,所以 a(97)减去 A(65)等于 32,转换大小写不过是加或减这个偏移量。

表格的四个区间

128 个码值并不整齐划一。工具使用的分类如下:

  • 控制字符,0-31 和 127——历史上用于驱动电传打字机和打印机;今天用于行尾、制表符和转义序列。
  • 标点与符号,32-47、58-64、91-96、123-126——空格,加上所有既不是字母也不是数字的字符。
  • 数字,48-57——0 到 9 依次排列,所以在 C 类语言里 '7' - '0' 得到整数 7。
  • 大写 65-90,小写 97-122——两个相邻的字母区块。

这种分组是历史上的设计选择,而非严格规则,这也是标点码值散落在字母、数字区块之间空隙里的原因。

今天仍在用的控制字符

控制字符区块大部分已经过时,但有少数每天都会出现在真实文件和配置里:

码值十六进制名称现代用途
000NULLC 里的字符串终止符,填充
707BEL终端响铃
808BS退格
909TAB缩进,TSV 文件
100ALFUnix/macOS 行尾
120CFF换页,分页
130DCRWindows CRLF 的一半
271BESCANSI 转义序列
1277FDEL删除

如果你曾打开一个 CSV 文件看到每行末尾有个 ^M,那就是 Windows 生成的文件残留的 CR(13)。

ASCII 如何嵌入 UTF-8

这张表停在 127 的原因是:再往上就属于另一种编码了。UTF-8 的设计目标是让前 128 个码点与 ASCII 逐字节相同:U+0041 的 A 就是单字节 0x41,与这里列出的完全一致。超出这个范围后,UTF-8 每个字符用两、三或四个字节,而且首个字节的最高位总是置 1。

一个具体的例子:字符 é 是 U+00E9,UTF-8 把它存成两个字节 0xC3 0xA9。这两个字节都不是 ASCII 码值,尽管这串序列渲染出来只是一个字母。当你在文件里扫描控制字节时,这个区别很关键。在合法 UTF-8 中,0x00 到 0x7F 的每个字节都恰好是这张表列出的 ASCII 字符,而任何大于等于 0x80 的字节要么是多字节序列的一部分,要么就是非法字节。

更早的单字节编码(例如 ISO-8859-1,也就是 Latin-1)确实把 128-255 直接映射成带重音的字符,这就是同一个文件在一个编辑器里正常、在另一个里乱码的原因。这张表刻意只覆盖 7 位范围,所以一旦看到 130 或更大的值,你就知道这份数据不是纯 ASCII。

常见错误

  • 把字节和码点混为一谈。 ASCII 码值是 0 到 127 的数字。它常常被补齐成 8 位字节,并不代表第 8 位属于 ASCII。
  • 以为八进制没有前导零。 printf 转义 \101 表示八进制 101 = 十进制 65 = A。表格把八进制值补齐到三位,正是为了这个原因。
  • 生成行尾时搞混 CR 和 LF。 只写 CR,或者在本该用 CRLF 的地方只写 LF,会破坏 Windows 工具,并让文本全部挤在一行。
  • 把代码页字符当成 ASCII。 128-255 这些字节(带重音的字母、弯引号)不是 ASCII;它们属于 Latin-1 或 Windows-1252 之类的扩展,需要另查一张表。

使用场景

  • 调试文本,找出正在破坏解析器或 diff 的隐形控制字符。
  • 学习字符码值与其整数值的关系,理解为什么 'A' 是 65。
  • 编写 shell 的 printf 或 echo -e 转义序列,需要八进制或十六进制形式。
  • 确认 TSV(TAB,9)与 CSV(逗号,44)用来分隔列的究竟是哪个字节。
  • 在把文件交给无法处理 Unicode 的系统之前,验证它确实是纯 ASCII。

相关工具

常见问题

为什么二进制那一列显示 7 位而不是 8 位?

因为 ASCII 是 7 位编码。0 到 127 的码值用 7 位就能表示,所以二进制列补齐到 7 位:A 是 1000001,而不是 01000001。当 ASCII 文本以 8 位字节存储时,最高位留作 0,这就是你偶尔看到 8 位形式 01000001 的原因。

CR(13)和 LF(10)有什么区别?

CR(carriage return,回车)把光标移回行首;LF(line feed,换行)把光标下移一行。Unix 和现代 macOS 只用 LF 结束一行,Windows 用 CRLF 这一对,经典 Mac OS 则单用 CR。残留的 CR 是文本看上去连成一长行、或者解析时冒出怪字符的常见原因。

为什么 DEL 的码值是 127,而不是挨着其他控制字符?

DEL 位于 7 位范围的顶端,是因为它最初的设计用途是擦除纸带上的字符——把纸带上所有孔都打掉。这也是为什么它的数值虽然和 0-31 区块分开,却仍然被归为控制字符。

怎样按十六进制或十进制码值查找字符?

用搜索框即可。精确匹配按这个顺序优先:十六进制值、十进制值、控制字符名,最后是字面字符,子串匹配的结果排在后面。输入 41 会返回 A,输入 0A 会返回换行符。

ASCII 和 UTF-8 是一回事吗?

不是,但它们在头 128 个字符上完全重合。ASCII 把 0-127 映射成单一值;UTF-8 是变长的 Unicode 编码,对这 128 个码点使用相同的字节值,再往上则用多个字节表示。这就是为什么 ASCII 文件永远是合法 UTF-8,反过来却不成立。

哪些 ASCII 码值对应可见字符?

32 到 126 是可打印字符,共 95 个:32 的空格,48-57 的数字,65-90 的大写字母,97-122 的小写字母,以及夹在它们之间的标点和符号。0-31 和 127 是不打印字形的控制字符。

由 HandyTools Hub 团队审校 · 最后更新