跳到主要内容
ansicode

C1 控制字符 —— ESC 序列的 8 位单字节等价形式(0x80–0x9F)

8 位 C1 控制字节(0x80..0x9F)—— CSI、OSC、ST、DCS、NEL、HTS、IND、RI —— 及其 7 位 ESC <letter> 等价形式。

字节形式

涵盖所有常见的字符串字面量写法,方便正反查找。

\\x1b[\x9b CSI \x9d OSC \x9c ST \x90 DCS \x85 NEL \x88 HTS \x84 IND \x8d RI
\\033[\233 / \235 / \234 / \220 / \205 / \210 / \204 / \215
\\e[(no \e form — these are single 8-bit bytes; use the 7-bit ESC equivalents below)
ESC [ESC [ ≡ CSI / ESC ] ≡ OSC / ESC \\ ≡ ST / ESC P ≡ DCS / ESC E ≡ NEL / ESC H ≡ HTS / ESC D ≡ IND / ESC M ≡ RI
hex9b / 9d / 9c / 90 / 85 / 88 / 84 / 8d

说明

**C1 控制集**占据 `0x80`..`0x9F` 字节范围,为最常用的 `ESC <letter>` 序列提供单字节替代形式。完整集合:`IND`(0x84,ESC D —— 不带 CR 的换行)、`NEL`(0x85,ESC E —— CR+LF)、`HTS`(0x88,ESC H —— 在当前列设置 tab 停位)、`RI`(0x8D,ESC M —— 反向换行,到顶时滚动)、`SS2`(0x8E,ESC N —— 对下一字符使用 G2 字符集单次切换)、`SS3`(0x8F,ESC O —— 单次切换 G3)、`DCS`(0x90,ESC P —— 设备控制串引导符)、`CSI`(0x9B,ESC [ —— 控制序列引导符,最常用)、`ST`(0x9C,ESC \\ —— 用于 DCS / OSC / APC / PM / SOS 的串终止符)、`OSC`(0x9D,ESC ] —— 操作系统命令引导符)、`PM`(0x9E,ESC ^ —— 隐私消息)、`APC`(0x9F,ESC _ —— 应用程序命令,Kitty 图形协议在用)。**现代终端请避免使用 8 位形式**:`0x80..0x9F` 中的每个字节都是 UTF-8 的*续字节*(前导比特模式 `10xxxxxx`),UTF-8 流中出现一个孤立的 `0x9B` 要么被当作非法序列的一部分吸收,要么被静默丢弃。请始终使用 7 位 `ESC <letter>` 形式(`\x1b[`、`\x1b]`、`\x1b\\` 等)—— 在 UTF-8、ASCII、Latin-1 下都是无歧义的,所有终端都识别。8 位 C1 集主要出现在遗留场景中(处于 S8C1T 模式的 DEC VT220、ISO 8859-1 字节流归档、老 VT100 固件测试向量)。

规范出处: ECMA-48 §5.2 (C1 set) / ISO 6429

参数

IND (0x84, ESC D)索引 —— 光标下移 1(无 CR 的 LF);位于区域底部时滚动
NEL (0x85, ESC E)下一行 —— CR + LF 合一
HTS (0x88, ESC H)水平制表设置 —— 在当前光标列设 tab 停位
RI (0x8D, ESC M)反向索引 —— 光标上移 1;位于区域顶部时滚动
SS2 (0x8E, ESC N)单次切换 G2 —— 仅对下一字符使用 G2 字符集
SS3 (0x8F, ESC O)单次切换 G3 —— 仅对下一字符使用 G3 字符集
DCS (0x90, ESC P)设备控制串引导符 —— 由 ST 终止
CSI (0x9B, ESC [)控制序列引导符 —— 最常用
ST (0x9C, ESC \\)串终止符 —— 关闭 DCS / OSC / APC / PM / SOS
OSC (0x9D, ESC ])操作系统命令 —— 由 ST 或 BEL 终止
PM (0x9E, ESC ^)隐私消息 —— 由 ST 终止
APC (0x9F, ESC _)应用程序命令 —— 由 ST 终止(Kitty 图形协议在用)

示例

bash
# 7-bit (preferred — UTF-8 safe):\nprintf '\033[31mred\033[0m'\nprintf '\033]0;new window title\033\\\\'\n# 8-bit C1 (legacy — breaks under UTF-8):\nprintf '\x9b31mred\x9b0m'   # only works if terminal is in 8-bit mode + Latin-1
python
# Prefer 7-bit ESC form:\nimport sys; sys.stdout.write('\x1b[31mred\x1b[0m')\n# 8-bit C1 — fails on UTF-8 stdouts:\n# sys.stdout.buffer.write(b'\x9b31mred\x9b0m')
go
// 7-bit ESC form (UTF-8 safe):\nfmt.Print("\x1b[31mred\x1b[0m")\n// 8-bit C1 — emits two UTF-8 continuation bytes interpreted as garbage:\n// os.Stdout.Write([]byte{0x9b, '3','1','m'})
javascript
process.stdout.write('\x1b[31mred\x1b[0m');\n// process.stdout.write(Buffer.from([0x9b, 0x33, 0x31, 0x6d]))  // breaks UTF-8
c
/* 7-bit ESC form: */\nprintf("\x1b[31mred\x1b[0m");\n/* 8-bit C1 — only safe on Latin-1 / explicit 8-bit terminals: */\n/* fputc(0x9b, stdout); fputs("31m", stdout); */

终端支持

xterm
部分
Linux console (fbcon)
不支持
macOS Terminal.app
不支持
iTerm2
不支持
Windows Terminal
不支持
cmd.exe / ConPTY
不支持
kitty
不支持
alacritty
不支持
WezTerm
不支持
Ghostty
不支持
GNOME Terminal
不支持
Konsole
不支持
tmux
不支持
GNU screen
不支持

相关序列

在家族食谱中

ESC 食谱 · 5. 锁定切换与 8 位 C1 桥 —— `\x1bn` / `\x1bo` / `\x1b|` 与 `\x80-\x9F`