ASCII 与字符编码表
0 到 255 每一个码位的十进制、十六进制、八进制、二进制和 HTML 实体,控制字符单独标出缩写的含义,128 到 159 这一段的 Latin-1 与 Windows-1252 两套定义分开对照。
显示 256 / 256 个码位|可打印 95 个、Latin-1 扩展 96 个、控制字符 65 个
码位详情
点下面表格里的任意一行,这里会显示它的完整信息,并把每个进制的值都配上复制按钮。
可打印区(32–126 与 160–255)
这一段的字符都能直接看见。160 到 255 属于 Latin-1 扩展,中文环境里常被误当成英文标点,实际是西欧语言要用的字符。
| 字符 | 十进 | 十六进 | 八进 | 二进 | 名称与含义 | HTML 实体 |
|---|---|---|---|---|---|---|
| 真正的空白字符,占一个字符宽度但不画任何东西。 |   | |||||
| 编程里还兼作逻辑非运算符。 | ! | |||||
| HTML 属性必须转义成实体,否则会截断标签。 | " | |||||
| CSS 色值、URL 片段、各种「# 号」都是它。 | # | |||||
| 正则里表示行尾,很多语言里是变量前缀。 | $ | |||||
| URL 编码转义符,编码后就写成了它加两位十六进制。 | % | |||||
| 在 HTML 和 XML 里必须转义,实体本身也以它开头。 | & | |||||
| 属于 ASCII,但不是弯引号 ’;HTML5 里可写 ',旧规范里没有这个命名实体。 | ' | |||||
| 编程里的分组、函数调用都靠它。 | ( | |||||
| 和左括号配对。 | ) | |||||
| 正则和通配符里表示「任意多个」,也常用来做强调。 | * | |||||
| URL 的查询串里常被当作空格处理,要传真正的加号得编码成 %2B。 | + | |||||
| CSV 的默认分隔符。 | , | |||||
| 一个字符兼两种用途,所以短横线在有些上下文里会被当成减号。 | - | |||||
| 文件扩展名、域名和正则里的「任意一个字符」都用它。 | . | |||||
| 路径分隔符(Unix)和除法符号。 | / | |||||
| ASCII 数字,0 到 9 在所有兼容 ASCII 的编码里都是同一个单字节。 | 0 | |||||
| ASCII 数字,0 到 9 在所有兼容 ASCII 的编码里都是同一个单字节。 | 1 | |||||
| ASCII 数字,0 到 9 在所有兼容 ASCII 的编码里都是同一个单字节。 | 2 | |||||
| ASCII 数字,0 到 9 在所有兼容 ASCII 的编码里都是同一个单字节。 | 3 | |||||
| ASCII 数字,0 到 9 在所有兼容 ASCII 的编码里都是同一个单字节。 | 4 | |||||
| ASCII 数字,0 到 9 在所有兼容 ASCII 的编码里都是同一个单字节。 | 5 | |||||
| ASCII 数字,0 到 9 在所有兼容 ASCII 的编码里都是同一个单字节。 | 6 | |||||
| ASCII 数字,0 到 9 在所有兼容 ASCII 的编码里都是同一个单字节。 | 7 | |||||
| ASCII 数字,0 到 9 在所有兼容 ASCII 的编码里都是同一个单字节。 | 8 | |||||
| ASCII 数字,0 到 9 在所有兼容 ASCII 的编码里都是同一个单字节。 | 9 | |||||
| 键值对、URL 协议头、IPv6 地址里的分隔符。 | : | |||||
| 不少语言的语句结束符,也常用来分隔多项参数。 | ; | |||||
| HTML 标签的起始符,直接写在正文里会被当成标签,必须转义。 | < | |||||
| 赋值和键值对的分隔符。 | = | |||||
| HTML 里建议转义;不转义时多数浏览器会容错。 | > | |||||
| URL 里查询串的起点。 | ? | |||||
| 邮箱地址和社交账号的前缀。 | @ | |||||
| 在 ASCII、Latin-1、UTF-8、GBK 里都是同一个单字节,是最通用的字符集。 | A | |||||
| 在 ASCII、Latin-1、UTF-8、GBK 里都是同一个单字节,是最通用的字符集。 | B | |||||
| 在 ASCII、Latin-1、UTF-8、GBK 里都是同一个单字节,是最通用的字符集。 | C | |||||
| 在 ASCII、Latin-1、UTF-8、GBK 里都是同一个单字节,是最通用的字符集。 | D | |||||
| 在 ASCII、Latin-1、UTF-8、GBK 里都是同一个单字节,是最通用的字符集。 | E | |||||
| 在 ASCII、Latin-1、UTF-8、GBK 里都是同一个单字节,是最通用的字符集。 | F | |||||
| 在 ASCII、Latin-1、UTF-8、GBK 里都是同一个单字节,是最通用的字符集。 | G | |||||
| 在 ASCII、Latin-1、UTF-8、GBK 里都是同一个单字节,是最通用的字符集。 | H | |||||
| 在 ASCII、Latin-1、UTF-8、GBK 里都是同一个单字节,是最通用的字符集。 | I | |||||
| 在 ASCII、Latin-1、UTF-8、GBK 里都是同一个单字节,是最通用的字符集。 | J | |||||
| 在 ASCII、Latin-1、UTF-8、GBK 里都是同一个单字节,是最通用的字符集。 | K | |||||
| 在 ASCII、Latin-1、UTF-8、GBK 里都是同一个单字节,是最通用的字符集。 | L | |||||
| 在 ASCII、Latin-1、UTF-8、GBK 里都是同一个单字节,是最通用的字符集。 | M | |||||
| 在 ASCII、Latin-1、UTF-8、GBK 里都是同一个单字节,是最通用的字符集。 | N | |||||
| 在 ASCII、Latin-1、UTF-8、GBK 里都是同一个单字节,是最通用的字符集。 | O | |||||
| 在 ASCII、Latin-1、UTF-8、GBK 里都是同一个单字节,是最通用的字符集。 | P | |||||
| 在 ASCII、Latin-1、UTF-8、GBK 里都是同一个单字节,是最通用的字符集。 | Q | |||||
| 在 ASCII、Latin-1、UTF-8、GBK 里都是同一个单字节,是最通用的字符集。 | R | |||||
| 在 ASCII、Latin-1、UTF-8、GBK 里都是同一个单字节,是最通用的字符集。 | S | |||||
| 在 ASCII、Latin-1、UTF-8、GBK 里都是同一个单字节,是最通用的字符集。 | T | |||||
| 在 ASCII、Latin-1、UTF-8、GBK 里都是同一个单字节,是最通用的字符集。 | U | |||||
| 在 ASCII、Latin-1、UTF-8、GBK 里都是同一个单字节,是最通用的字符集。 | V | |||||
| 在 ASCII、Latin-1、UTF-8、GBK 里都是同一个单字节,是最通用的字符集。 | W | |||||
| 在 ASCII、Latin-1、UTF-8、GBK 里都是同一个单字节,是最通用的字符集。 | X | |||||
| 在 ASCII、Latin-1、UTF-8、GBK 里都是同一个单字节,是最通用的字符集。 | Y | |||||
| 在 ASCII、Latin-1、UTF-8、GBK 里都是同一个单字节,是最通用的字符集。 | Z | |||||
| 数组、下标和正则字符组都用它。 | [ | |||||
| Windows 的路径分隔符,也是大多数语言里的转义字符。 | \ | |||||
| 和左方括号配对。 | ] | |||||
| 正则里表示行首,不少语言里是位异或。 | ^ | |||||
| 标识符里唯一能用的纯标点符号,中文输入法下容易和全角下划线混淆。 | _ | |||||
| SQL 里括标识符,Markdown 里表示代码片段。 | ` | |||||
| 在 ASCII、Latin-1、UTF-8、GBK 里都是同一个单字节,是最通用的字符集。 | a | |||||
| 在 ASCII、Latin-1、UTF-8、GBK 里都是同一个单字节,是最通用的字符集。 | b | |||||
| 在 ASCII、Latin-1、UTF-8、GBK 里都是同一个单字节,是最通用的字符集。 | c | |||||
| 在 ASCII、Latin-1、UTF-8、GBK 里都是同一个单字节,是最通用的字符集。 | d | |||||
| 在 ASCII、Latin-1、UTF-8、GBK 里都是同一个单字节,是最通用的字符集。 | e | |||||
| 在 ASCII、Latin-1、UTF-8、GBK 里都是同一个单字节,是最通用的字符集。 | f | |||||
| 在 ASCII、Latin-1、UTF-8、GBK 里都是同一个单字节,是最通用的字符集。 | g | |||||
| 在 ASCII、Latin-1、UTF-8、GBK 里都是同一个单字节,是最通用的字符集。 | h | |||||
| 在 ASCII、Latin-1、UTF-8、GBK 里都是同一个单字节,是最通用的字符集。 | i | |||||
| 在 ASCII、Latin-1、UTF-8、GBK 里都是同一个单字节,是最通用的字符集。 | j | |||||
| 在 ASCII、Latin-1、UTF-8、GBK 里都是同一个单字节,是最通用的字符集。 | k | |||||
| 在 ASCII、Latin-1、UTF-8、GBK 里都是同一个单字节,是最通用的字符集。 | l | |||||
| 在 ASCII、Latin-1、UTF-8、GBK 里都是同一个单字节,是最通用的字符集。 | m | |||||
| 在 ASCII、Latin-1、UTF-8、GBK 里都是同一个单字节,是最通用的字符集。 | n | |||||
| 在 ASCII、Latin-1、UTF-8、GBK 里都是同一个单字节,是最通用的字符集。 | o | |||||
| 在 ASCII、Latin-1、UTF-8、GBK 里都是同一个单字节,是最通用的字符集。 | p | |||||
| 在 ASCII、Latin-1、UTF-8、GBK 里都是同一个单字节,是最通用的字符集。 | q | |||||
| 在 ASCII、Latin-1、UTF-8、GBK 里都是同一个单字节,是最通用的字符集。 | r | |||||
| 在 ASCII、Latin-1、UTF-8、GBK 里都是同一个单字节,是最通用的字符集。 | s | |||||
| 在 ASCII、Latin-1、UTF-8、GBK 里都是同一个单字节,是最通用的字符集。 | t | |||||
| 在 ASCII、Latin-1、UTF-8、GBK 里都是同一个单字节,是最通用的字符集。 | u | |||||
| 在 ASCII、Latin-1、UTF-8、GBK 里都是同一个单字节,是最通用的字符集。 | v | |||||
| 在 ASCII、Latin-1、UTF-8、GBK 里都是同一个单字节,是最通用的字符集。 | w | |||||
| 在 ASCII、Latin-1、UTF-8、GBK 里都是同一个单字节,是最通用的字符集。 | x | |||||
| 在 ASCII、Latin-1、UTF-8、GBK 里都是同一个单字节,是最通用的字符集。 | y | |||||
| 在 ASCII、Latin-1、UTF-8、GBK 里都是同一个单字节,是最通用的字符集。 | z | |||||
| 代码块、对象字面量和占位符都用它。 | { | |||||
| 管道操作符、正则里的「或」。 | | | |||||
| 和左花括号配对。 | } | |||||
| Unix 里表示家目录,语言里常是位取反。 | ~ | |||||
| 看起来是空格,但浏览器不会在这里断行;从网页复制文本时常常把它一起带出来,导致「看起来一样却不相等」。 | | |||||
| 西班牙语里句首的感叹号。 | ¡ | |||||
| 美元、欧元等货币的辅币符号。 | ¢ | |||||
| Latin-1 扩展字符,UTF-8 里编码成两个字节。 | £ | |||||
| 币种未定时的占位符号。 | ¤ | |||||
| 日元和人民币在非正式场合都常借用它。 | ¥ | |||||
| 显示为断开的竖线,排版里当分隔用。 | ¦ | |||||
| 法律和标准条文里的「第几节」。 | § | |||||
| 单独出现时表示重复上一个词,德语里也标变音。 | ¨ | |||||
| Latin-1 扩展字符,UTF-8 里编码成两个字节。 | © | |||||
| 西班牙语阴性序数缩写(相当于英文的 a 后缀)。 | ª | |||||
| 法语、俄语等语言里的开引号。 | « | |||||
| Latin-1 扩展字符,UTF-8 里编码成两个字节。 | ¬ | |||||
| 本身不可见,只在换行时决定断词位置;它和普通连字符不是一回事。 | ­ | |||||
| Latin-1 扩展字符,UTF-8 里编码成两个字节。 | ® | |||||
| Latin-1 扩展字符,UTF-8 里编码成两个字节。 | ¯ | |||||
| Latin-1 扩展字符,UTF-8 里编码成两个字节。 | ° | |||||
| Latin-1 扩展字符,UTF-8 里编码成两个字节。 | ± | |||||
| Latin-1 扩展字符,UTF-8 里编码成两个字节。 | ² | |||||
| Latin-1 扩展字符,UTF-8 里编码成两个字节。 | ³ | |||||
| Latin-1 扩展字符,UTF-8 里编码成两个字节。 | ´ | |||||
| 词头 micro 的符号,和希腊字母 μ(U+03BC)是两个不同码位,做单位换算时容易混。 | µ | |||||
| Latin-1 扩展字符,UTF-8 里编码成两个字节。 | ¶ | |||||
| 中文里常被借去当人名、书名的间隔点。 | · | |||||
| Latin-1 扩展字符,UTF-8 里编码成两个字节。 | ¸ | |||||
| Latin-1 扩展字符,UTF-8 里编码成两个字节。 | ¹ | |||||
| Latin-1 扩展字符,UTF-8 里编码成两个字节。 | º | |||||
| 和左双角引号配对,法语里当闭引号。 | » | |||||
| Latin-1 扩展字符,UTF-8 里编码成两个字节。 | ¼ | |||||
| Latin-1 扩展字符,UTF-8 里编码成两个字节。 | ½ | |||||
| Latin-1 扩展字符,UTF-8 里编码成两个字节。 | ¾ | |||||
| 西班牙语里句首的问号。 | ¿ | |||||
| Latin-1 扩展字符,UTF-8 里编码成两个字节。 | À | |||||
| Latin-1 扩展字符,UTF-8 里编码成两个字节。 | Á | |||||
| Latin-1 扩展字符,UTF-8 里编码成两个字节。 | Â | |||||
| Latin-1 扩展字符,UTF-8 里编码成两个字节。 | Ã | |||||
| Latin-1 扩展字符,UTF-8 里编码成两个字节。 | Ä | |||||
| Latin-1 扩展字符,UTF-8 里编码成两个字节。 | Å | |||||
| 丹麦语、挪威语里的一个独立字母,不是一个 A 加一个 E。 | Æ | |||||
| Latin-1 扩展字符,UTF-8 里编码成两个字节。 | Ç | |||||
| Latin-1 扩展字符,UTF-8 里编码成两个字节。 | È | |||||
| Latin-1 扩展字符,UTF-8 里编码成两个字节。 | É | |||||
| Latin-1 扩展字符,UTF-8 里编码成两个字节。 | Ê | |||||
| Latin-1 扩展字符,UTF-8 里编码成两个字节。 | Ë | |||||
| Latin-1 扩展字符,UTF-8 里编码成两个字节。 | Ì | |||||
| Latin-1 扩展字符,UTF-8 里编码成两个字节。 | Í | |||||
| Latin-1 扩展字符,UTF-8 里编码成两个字节。 | Î | |||||
| Latin-1 扩展字符,UTF-8 里编码成两个字节。 | Ï | |||||
| 冰岛语和法罗语字母,读音接近浊 th。 | Ð | |||||
| Latin-1 扩展字符,UTF-8 里编码成两个字节。 | Ñ | |||||
| Latin-1 扩展字符,UTF-8 里编码成两个字节。 | Ò | |||||
| Latin-1 扩展字符,UTF-8 里编码成两个字节。 | Ó | |||||
| Latin-1 扩展字符,UTF-8 里编码成两个字节。 | Ô | |||||
| Latin-1 扩展字符,UTF-8 里编码成两个字节。 | Õ | |||||
| Latin-1 扩展字符,UTF-8 里编码成两个字节。 | Ö | |||||
| 数学乘号,不是字母 x,做公式替换时要注意。 | × | |||||
| 丹麦语、挪威语里的独立字母。 | Ø | |||||
| Latin-1 扩展字符,UTF-8 里编码成两个字节。 | Ù | |||||
| Latin-1 扩展字符,UTF-8 里编码成两个字节。 | Ú | |||||
| Latin-1 扩展字符,UTF-8 里编码成两个字节。 | Û | |||||
| Latin-1 扩展字符,UTF-8 里编码成两个字节。 | Ü | |||||
| Latin-1 扩展字符,UTF-8 里编码成两个字节。 | Ý | |||||
| 冰岛语字母,读音接近清 th。 | Þ | |||||
| 德语里的小写 ß,大写形式是后来才补进 Unicode 的。 | ß | |||||
| Latin-1 扩展字符,UTF-8 里编码成两个字节。 | à | |||||
| Latin-1 扩展字符,UTF-8 里编码成两个字节。 | á | |||||
| Latin-1 扩展字符,UTF-8 里编码成两个字节。 | â | |||||
| Latin-1 扩展字符,UTF-8 里编码成两个字节。 | ã | |||||
| Latin-1 扩展字符,UTF-8 里编码成两个字节。 | ä | |||||
| Latin-1 扩展字符,UTF-8 里编码成两个字节。 | å | |||||
| Latin-1 扩展字符,UTF-8 里编码成两个字节。 | æ | |||||
| Latin-1 扩展字符,UTF-8 里编码成两个字节。 | ç | |||||
| Latin-1 扩展字符,UTF-8 里编码成两个字节。 | è | |||||
| Latin-1 扩展字符,UTF-8 里编码成两个字节。 | é | |||||
| Latin-1 扩展字符,UTF-8 里编码成两个字节。 | ê | |||||
| Latin-1 扩展字符,UTF-8 里编码成两个字节。 | ë | |||||
| Latin-1 扩展字符,UTF-8 里编码成两个字节。 | ì | |||||
| Latin-1 扩展字符,UTF-8 里编码成两个字节。 | í | |||||
| Latin-1 扩展字符,UTF-8 里编码成两个字节。 | î | |||||
| Latin-1 扩展字符,UTF-8 里编码成两个字节。 | ï | |||||
| Latin-1 扩展字符,UTF-8 里编码成两个字节。 | ð | |||||
| Latin-1 扩展字符,UTF-8 里编码成两个字节。 | ñ | |||||
| Latin-1 扩展字符,UTF-8 里编码成两个字节。 | ò | |||||
| Latin-1 扩展字符,UTF-8 里编码成两个字节。 | ó | |||||
| Latin-1 扩展字符,UTF-8 里编码成两个字节。 | ô | |||||
| Latin-1 扩展字符,UTF-8 里编码成两个字节。 | õ | |||||
| Latin-1 扩展字符,UTF-8 里编码成两个字节。 | ö | |||||
| 数学除号,编程里用的是斜杠。 | ÷ | |||||
| Latin-1 扩展字符,UTF-8 里编码成两个字节。 | ø | |||||
| Latin-1 扩展字符,UTF-8 里编码成两个字节。 | ù | |||||
| Latin-1 扩展字符,UTF-8 里编码成两个字节。 | ú | |||||
| Latin-1 扩展字符,UTF-8 里编码成两个字节。 | û | |||||
| Latin-1 扩展字符,UTF-8 里编码成两个字节。 | ü | |||||
| Latin-1 扩展字符,UTF-8 里编码成两个字节。 | ý | |||||
| Latin-1 扩展字符,UTF-8 里编码成两个字节。 | þ | |||||
| Latin-1 扩展字符,UTF-8 里编码成两个字节。 | ÿ |
控制字符区(0–31、127–159)
这些码位画不出东西,表里用 ␀ 这类可见替代符号占位。128 到 159 一段另外标了 Windows-1252 里的对应字符,那是同一段字节的另一种解释。
| 符号 | 十进 | 十六进 | 缩写 | 中文含义 | Windows-1252 |
|---|---|---|---|---|---|
| NUL | 空字符 所有位都是 0,常被当字符串结束标志(C 语言就是靠它结尾)。 | (Windows-1252 未定义) | |||
| SOH | 标题开始 老式电传机用来标记报文头开始。 | (Windows-1252 未定义) | |||
| STX | 正文开始 标记报文正文的起点,和 ETX 成对使用。 | (Windows-1252 未定义) | |||
| ETX | 正文结束 标记报文正文的终点。 | (Windows-1252 未定义) | |||
| EOT | 传输结束 表示本次传输到此为止;也是终端里的 Ctrl+D。 | (Windows-1252 未定义) | |||
| ENQ | 询问 请求对端给出应答,相当于「你还在吗」。 | (Windows-1252 未定义) | |||
| ACK | 确认 对 ENQ 或收到数据的肯定应答。 | (Windows-1252 未定义) | |||
| BEL | 响铃 让终端响一声,就是终端的 Ctrl+G 响铃。 | (Windows-1252 未定义) | |||
| BS | 退格 光标左移一格,键盘上的 Backspace 就是它。 | (Windows-1252 未定义) | |||
| HT | 水平制表 跳到下一个制表位,就是键盘上的 Tab。 | (Windows-1252 未定义) | |||
| LF | 换行 换到下一行,Unix/Linux 用它作为行结束符。 | (Windows-1252 未定义) | |||
| VT | 垂直制表 向下移动到下一个垂直制表位,现在几乎没人用。 | (Windows-1252 未定义) | |||
| FF | 换页 换到下一页,早年打印机用它走纸。 | (Windows-1252 未定义) | |||
| CR | 回车 光标回到本行开头;Windows 的行结束符是 CR 加 LF,经典 Mac 只用 CR。 | (Windows-1252 未定义) | |||
| SO | 移出 切换到备用字符集,老式终端的两套字库切换。 | (Windows-1252 未定义) | |||
| SI | 移入 切回主字符集。 | (Windows-1252 未定义) | |||
| DLE | 数据链路转义 在传输数据里插入控制信息时用作转义。 | (Windows-1252 未定义) | |||
| DC1 | 设备控制 1 传统的 Ctrl+Q,恢复被暂停的输出。 | (Windows-1252 未定义) | |||
| DC2 | 设备控制 2 留给设备自定义,日常基本遇不到。 | (Windows-1252 未定义) | |||
| DC3 | 设备控制 3 传统的 Ctrl+S,暂停终端输出。 | (Windows-1252 未定义) | |||
| DC4 | 设备控制 4 留给设备自定义。 | (Windows-1252 未定义) | |||
| NAK | 否定应答 对 ENQ 或收到数据的否定应答。 | (Windows-1252 未定义) | |||
| SYN | 同步空闲 空闲时保持线路同步,现代协议已不用。 | (Windows-1252 未定义) | |||
| ETB | 传输块结束 标记一个数据块传输完毕,不是整条报文结束。 | (Windows-1252 未定义) | |||
| CAN | 取消 Ctrl+X,表示刚才那行不要了。 | (Windows-1252 未定义) | |||
| EM | 介质结束 表示存储介质或数据流到底了。 | (Windows-1252 未定义) | |||
| SUB | 替换 Ctrl+Z,DOS 里用它表示文件结尾。 | (Windows-1252 未定义) | |||
| ESC | 转义 转义序列的起始字符,终端颜色、光标控制都靠它开头。 | (Windows-1252 未定义) | |||
| FS | 文件分隔符 结构化数据里的层级分隔符之一(文件层)。 | (Windows-1252 未定义) | |||
| GS | 组分隔符 同上,对应「组」这一层。 | (Windows-1252 未定义) | |||
| RS | 记录分隔符 同上,对应「记录」这一层。 | (Windows-1252 未定义) | |||
| US | 单元分隔符 最细一层的分隔符,现在一般都用逗号或制表符代替。 | (Windows-1252 未定义) | |||
| DEL | 删除 原本用来抹掉纸带上的一个字符;今天键盘上的 Delete(不是 Backspace)常发出它。 | (Windows-1252 未定义) | |||
| PAD | 填充 在 ISO-8859-1 里是 C1 控制字符;同一字节在 Windows-1252 里显示为「€」,这是两套编码打架最常见的一段。 | € | |||
| HOP | 高位字节前置 在 ISO-8859-1 里是 C1 控制字符;Windows-1252 在这一码位没有定义,用到它就会出现乱码或缺字。 | (Windows-1252 未定义) | |||
| BPH | 允许此处换行 在 ISO-8859-1 里是 C1 控制字符;同一字节在 Windows-1252 里显示为「‚」,这是两套编码打架最常见的一段。 | ‚ | |||
| NBH | 禁止此处换行 在 ISO-8859-1 里是 C1 控制字符;同一字节在 Windows-1252 里显示为「ƒ」,这是两套编码打架最常见的一段。 | ƒ | |||
| IND | 索引(下移一行) 在 ISO-8859-1 里是 C1 控制字符;同一字节在 Windows-1252 里显示为「„」,这是两套编码打架最常见的一段。 | „ | |||
| NEL | 下一行 在 ISO-8859-1 里是 C1 控制字符;同一字节在 Windows-1252 里显示为「…」,这是两套编码打架最常见的一段。 | … | |||
| SSA | 选中区域开始 在 ISO-8859-1 里是 C1 控制字符;同一字节在 Windows-1252 里显示为「†」,这是两套编码打架最常见的一段。 | † | |||
| ESA | 选中区域结束 在 ISO-8859-1 里是 C1 控制字符;同一字节在 Windows-1252 里显示为「‡」,这是两套编码打架最常见的一段。 | ‡ | |||
| HTS | 设置水平制表位 在 ISO-8859-1 里是 C1 控制字符;同一字节在 Windows-1252 里显示为「ˆ」,这是两套编码打架最常见的一段。 | ˆ | |||
| HTJ | 带对齐的水平制表 在 ISO-8859-1 里是 C1 控制字符;同一字节在 Windows-1252 里显示为「‰」,这是两套编码打架最常见的一段。 | ‰ | |||
| VTS | 设置垂直制表位 在 ISO-8859-1 里是 C1 控制字符;同一字节在 Windows-1252 里显示为「Š」,这是两套编码打架最常见的一段。 | Š | |||
| PLD | 部分行下移 在 ISO-8859-1 里是 C1 控制字符;同一字节在 Windows-1252 里显示为「‹」,这是两套编码打架最常见的一段。 | ‹ | |||
| PLU | 部分行上移 在 ISO-8859-1 里是 C1 控制字符;同一字节在 Windows-1252 里显示为「Œ」,这是两套编码打架最常见的一段。 | Œ | |||
| RI | 反向换行 在 ISO-8859-1 里是 C1 控制字符;Windows-1252 在这一码位没有定义,用到它就会出现乱码或缺字。 | (Windows-1252 未定义) | |||
| SS2 | 单次移出 2 在 ISO-8859-1 里是 C1 控制字符;同一字节在 Windows-1252 里显示为「Ž」,这是两套编码打架最常见的一段。 | Ž | |||
| SS3 | 单次移出 3 在 ISO-8859-1 里是 C1 控制字符;Windows-1252 在这一码位没有定义,用到它就会出现乱码或缺字。 | (Windows-1252 未定义) | |||
| DCS | 设备控制字符串 在 ISO-8859-1 里是 C1 控制字符;Windows-1252 在这一码位没有定义,用到它就会出现乱码或缺字。 | (Windows-1252 未定义) | |||
| PU1 | 私用 1 在 ISO-8859-1 里是 C1 控制字符;同一字节在 Windows-1252 里显示为「‘」,这是两套编码打架最常见的一段。 | ‘ | |||
| PU2 | 私用 2 在 ISO-8859-1 里是 C1 控制字符;同一字节在 Windows-1252 里显示为「’」,这是两套编码打架最常见的一段。 | ’ | |||
| STS | 设置发送状态 在 ISO-8859-1 里是 C1 控制字符;同一字节在 Windows-1252 里显示为「“」,这是两套编码打架最常见的一段。 | “ | |||
| CCH | 取消字符 在 ISO-8859-1 里是 C1 控制字符;同一字节在 Windows-1252 里显示为「”」,这是两套编码打架最常见的一段。 | ” | |||
| MW | 有消息等待 在 ISO-8859-1 里是 C1 控制字符;同一字节在 Windows-1252 里显示为「•」,这是两套编码打架最常见的一段。 | • | |||
| SPA | 保护区域开始 在 ISO-8859-1 里是 C1 控制字符;同一字节在 Windows-1252 里显示为「–」,这是两套编码打架最常见的一段。 | – | |||
| EPA | 保护区域结束 在 ISO-8859-1 里是 C1 控制字符;同一字节在 Windows-1252 里显示为「—」,这是两套编码打架最常见的一段。 | — | |||
| SOS | 字符串开始 在 ISO-8859-1 里是 C1 控制字符;同一字节在 Windows-1252 里显示为「˜」,这是两套编码打架最常见的一段。 | ˜ | |||
| SGC | 单个图形字符引入 在 ISO-8859-1 里是 C1 控制字符;同一字节在 Windows-1252 里显示为「™」,这是两套编码打架最常见的一段。 | ™ | |||
| SCI | 单个字符引入 在 ISO-8859-1 里是 C1 控制字符;同一字节在 Windows-1252 里显示为「š」,这是两套编码打架最常见的一段。 | š | |||
| CSI | 控制序列引入(ESC [ 里的那个 [) 在 ISO-8859-1 里是 C1 控制字符;同一字节在 Windows-1252 里显示为「›」,这是两套编码打架最常见的一段。 | › | |||
| ST | 字符串结束 在 ISO-8859-1 里是 C1 控制字符;同一字节在 Windows-1252 里显示为「œ」,这是两套编码打架最常见的一段。 | œ | |||
| OSC | 操作系统命令 在 ISO-8859-1 里是 C1 控制字符;Windows-1252 在这一码位没有定义,用到它就会出现乱码或缺字。 | (Windows-1252 未定义) | |||
| PM | 隐私消息 在 ISO-8859-1 里是 C1 控制字符;同一字节在 Windows-1252 里显示为「ž」,这是两套编码打架最常见的一段。 | ž | |||
| APC | 应用程序命令 在 ISO-8859-1 里是 C1 控制字符;同一字节在 Windows-1252 里显示为「Ÿ」,这是两套编码打架最常见的一段。 | Ÿ |
使用说明
ASCII 是 7 位编码,只有 128 个码位,从 0 到 127。其中 0 到 31 是控制字符,原本用来控制电传打字机和打印机,像 NUL、BEL、HT、LF、CR、ESC 至今还在用;32 到 126 是可打印字符,也就是英文键盘上能直接敲出来的那批;127 是 DEL。Latin-1(ISO-8859-1)把 8 位填满到 256 个,低半段 0 到 127 与 ASCII 逐字节相同,高半段 128 到 255 补上了西欧语言的带重音字母、货币和度量符号。所以查前半段时,ASCII 表和 Latin-1 表的结论完全一致。
最需要记住的是 128 到 159 这一段的两套定义。ISO-8859-1 把它划成 C1 控制字符,什么也不画;微软的 Windows-1252 把这一段换成了弯引号、破折号、省略号、欧元符号等日常符号。同样一个字节 0x93,在 Latin-1 里是空的,在 cp1252 里是左双引号。很多「乱码」的根源就在这里:页面或接口声明用 latin-1,内容其实按 cp1252 编的,于是引号和破折号变成了问号或别的符号。表里把两套并排放出来,比对时一眼就能看出是这一段出的问题。
中文在这张表里查不到,这不是缺数据,而是 ASCII 本身表达不了中文。一个汉字在 GBK 里占两个字节、在 UTF-8 里通常占三个字节,每个字节的值都大于 127,早就超出了 ASCII 的定义范围。想把中文的字节看明白,得用十六进制转文本按字节对照,或者用编码检测与乱码修复去猜整段文本到底是用哪种编码存下来的。
UTF-8 的设计正好借用了这一点:0 到 127 的字符在 UTF-8 里仍然编成一个字节,且与 ASCII 完全相同,所以纯英文文本用 ASCII 和 UTF-8 存下来没有区别;大于 127 的字符要占两到四个字节,第一个字节的高位一定是 1。这样只认 ASCII 的老程序读到大于 127 的字节就能判断出这不是单个 ASCII 字符,不会把多字节字符拆散。这也是 UTF-8 能在老系统上逐步铺开的原因。想把某个字符在码点和转义序列之间来回看,用Unicode 转义;把这页提到的字节序列转成 Base64 存储,则用Base64 编解码。
最后是 HTML 实体。ASCII 段里只有 "、&、<、> 少数几个有命名实体,连单引号都没有标准命名写法;Latin-1 段的 160 到 255 反而大都有命名实体,比如 、©、×。命名实体可读性好但数量有限,数字实体永远可用(十进制 ©、十六进制 ©)。放在 HTML 或 XML 里写实体最稳妥,放到别的语言或纯文本里就直接写字符本身。控制字符没有字形,表里那列 ␀ 一类的符号只是 Unicode 提供的可见替代符号,方便在表格里占位,和真正的控制码不是一回事。
常见问题
ASCII 一共多少个字符?
128 个,从 0 到 127,因为它最初是 7 位编码。其中 0 到 31 是控制字符,32 到 126 是可打印字符,127 是 DEL。也就是说 ASCII 里既没有中文,也没有 e、a 这类带重音的西欧字母,它们都是后来由别的编码补进去的。
Latin-1 和 ASCII 是什么关系?
Latin-1(ISO-8859-1)是 8 位编码,低半段 0 到 127 与 ASCII 完全一致,高半段 128 到 255 用来放西欧的重音字母、货币和度量符号,把 256 个位置填满。所以它算 ASCII 的超集,而不是另一套互不相干的编码;前半部分查哪张表结果都一样。
为什么 128 到 159 这一段有两套完全不同的字符?
这是本页最值得留意的一段。ISO-8859-1 把 128 到 159 定义为 C1 控制字符,什么也画不出来;而微软的 Windows-1252(常被简称 cp1252)把这一段替换成了弯引号、破折号、省略号、欧元符号这些日常要用的符号。同一个字节 0x93,在 Latin-1 里是空的,在 cp1252 里是左双引号。网页声明用 latin-1、内容实际是 cp1252 时,这类乱码就出现了,表里两套定义都列出来方便对照。
中文能在这张表里查到吗?
查不到。这张表只覆盖 0 到 255,而中文一个字在 GBK 里占两个字节、在 UTF-8 里通常占三个字节,每个字节的值都大于 127,根本不在 ASCII 的定义里。所以用 ASCII 表是表达不了中文的,要处理中文得用十六进制转文本或编码检测修复这类工具按字节看。
UTF-8 和 ASCII 是什么关系?
UTF-8 是变长编码:0 到 127 的字符编码成一个字节,并且和 ASCII 的写法一模一样,所以纯英文文本用 ASCII 存还是用 UTF-8 存,结果完全相同;大于 127 的字符要占两到四个字节,而且第一个字节的高位一定是 1。这样一来,只认 ASCII 的老程序读到一个大于 127 的字节,就知道它后面还有续接字节,不会把多字节字符拆散。
命名实体和数字实体该用哪个?
命名实体(©、 这类)可读性好,但 HTML5 里总共只有约 2200 个,而且 ASCII 段里只有 "、&、<、> 少数几个有名字,连单引号都没有标准的命名实体。数字实体永远可用,十进制写成 ©、十六进制写成 ©。放在 HTML 或 XML 里用实体最稳,放到别的语言、纯文本或聊天框里直接写字符本身更合适。
为什么 0 和 127 显示成 ␀、␡ 这种奇怪的符号?
因为这些码位本身不画任何东西,是控制码。表里用的 ␀ 和 ␡ 是 Unicode 专门为控制字符准备的可见替代符号(U+2400 到 U+2421),借来只是为了让表格看得见,它并不等于原字符。真要复制,复制走的仍然是那个真正的控制码,粘到编辑器里多半看不见,还会影响排版。
表里的数字格子点了会复制什么?
十进制、十六进制、八进制、二进制四格都能点,点了就复制该格显示的写法(带 0x、0o 前缀)。字符那一列点一下就复制字符本身。控制字符没有字形,点「字符」复制到的是真正的控制码,请留意它可能不可见。