C0与C1控制字符是ISO/IEC 2022定义的控制字符集。
C0控制字符集的码位范围00HEX–1FHEX;C1控制字符集的码位范围 80HEX–9FHEX。 默认的C0控制字符集起源于ISO 646 (ASCII)的定义。默认的C1控制字符集起源于ECMA-48 (后为ISO 6429)的定义。
Unicode
Unicode字符集定义了65个码位以兼容ISO/IEC 2022。Unicode控制字符覆盖了U+0000—U+001F (C0 控制字符), U+007F (delete), and U+0080—U+009F (C1 controls)。 Unicode仅对U+001C—U+001F, U+0009—U+000D, 与 U+0085限定了语义。其它控制字符的语义对Unicode透明,留给了高层协议。
C0 (ASCII及其派生)
ASCII定义了32个控制字符,再加上一个Delete字符。
在当时(20世纪六七十年代)这麽多控制字符都是需要的,因为多字节表示的控制序列要求终端机实现一个状态机,这在当时的电传或机械终端非常困难。但现在仅有少数控制字符还被使用(如空白符范畴的BS, TAB, LF, VT, FF, CR),其它一些字符无用,还有一些改变了用途(如NUL表示C语言字符串的终止)。
一些传输协议如ANPA-1312对控制字符SOH, STX, ETX 与 EOT做了扩展使用。其它著名的如BEL, ACK, NAK 与 SYN现在过时了。
现代终端有很多控制符可通过多字节的ANSI转义序列(开头为ESC 与 '[')表示。
ASCII控制字符的标准最初定义为ANSI X3.4。对于ISO/IEC 2022扩展机制,称为主动的C0控制字符集,采用八进制表示0x1B 0x21 0x40
(ESC ! @
).
C1控制字符集
当8比特ISO/IEC 8859 ASCII扩展提出后,人们认识到把最高比特去掉后可打印字符不应该变成控制字符(显然Delete字符被认为是无害的)。因此,新的标准保留了对应于C0控制字符集的32个码位但最高比特置1,作为C1控制字符集。所有C1控制字符在标准中指定了用ESC开头的7比特字符序列表示,以向后兼容7比特传输。
除了几乎不用的NEL,C1控制符在UTF-8中需要2字节编码。
当这些码位用于现代文档、网页、电子邮件消息等表示时,虽然表面上是用包含C1控制字符集的ISO-8859-n编码,但通常这些码位被私有、系统相关的编码方案如Windows-1252或苹果公司的Macintosh (Mac OS Roman)字符集,把C1控制符的码位用作提供额外的可打印字符。
Esc+ |
Dec |
Hex |
缩写 |
名字 |
描述
|
@ |
128 |
80 |
PAD |
Padding Character |
不属于ISO/IEC 6429 (ECMA-48)。在早期的ISO 10646用作编码非ASCII字符的建议机制。但后来删除了这一功能。[2][6][7]
|
A |
129 |
81 |
HOP |
High Octet Preset |
不属于ISO/IEC 6429 (ECMA-48). 在早期的ISO 10646用作引入遵从ISO 2022的多字节字符序列。但未列入国际标准的实现。RFC 1345标准也不再保留这一码位名字。[2][6]
|
B |
130 |
82 |
BPH |
Break Permitted Here |
下一个字符之前可以出现换行。粗略相当于soft hyphen但不意味着必然出现一个分字符。不是ISO/IEC 6429第一版的内容。[8]参见零宽空格.
|
C |
131 |
83 |
NBH |
No Break Here |
随后的可打印字符不能在此分开单词。不是ISO/IEC 6429第一版的内容。[8]参见 分字符.
|
D |
132 |
84 |
IND |
Index |
向下移动一行。以去除LF的模糊性。1988年过时。1992年从ISO/IEC 6429删除
|
E |
133 |
85 |
NEL |
Next Line |
等价于CR+LF. 用于在一些IBM大型机上标示行的结束
|
F |
134 |
86 |
SSA |
Start of Selected Area |
用于面向块的终端
|
G |
135 |
87 |
ESA |
End of Selected Area
|
H |
136 |
88 |
HTS |
Character Tabulation Set Horizontal Tabulation Set |
在此设置一个水平制表位。
|
I |
137 |
89 |
HTJ |
Character Tabulation With Justification Horizontal Tabulation With Justification
|
类似于字符制表位控制符,但Similar to Character Tabulation, except that instead of spaces or lines being placed after the preceding characters until the next tab stop is reached, the spaces or lines are placed preceding the active field so that preceding graphic character is placed just before the next tab stop.
|
J |
138 |
8A |
VTS |
Line Tabulation Set Vertical Tabulation Set |
在此设置一个行制表位。
|
K |
139 |
8B |
PLD |
Partial Line Forward Partial Line Down |
在ISO/IEC 6429中产生上角标或者下角标,如对打印机。 e.g., in a printer. 下标使用代码 PLD text PLU ;上标使用代码PLU text PLD .
|
L |
140 |
8C |
PLU |
Partial Line Backward Partial Line Up
|
M |
141 |
8D |
RI |
Reverse Line Feed Reverse Index |
|
N |
142 |
8E |
SS2 |
Single-Shift 2 |
下一个字符相应地从G2或G3可打印字符集调用一个字符。对于遵从ISO/IEC 4873 (ECMA-43)的其他C1字符集,这两个八进制码位也是用于这个目的。
|
O |
143 |
8F |
SS3 |
Single-Shift 3
|
P |
144 |
90 |
DCS |
Device Control String |
开始一个可打印字符串(0x20 至 0x7E) 与格式效果描述(0x08 至 0x0D), 以ST (0x9C)终止.
|
Q |
145 |
91 |
PU1 |
Private Use 1 |
保留给私用
|
R |
146 |
92 |
PU2 |
Private Use 2
|
S |
147 |
93 |
STS |
Set Transmit State |
|
T |
148 |
94 |
CCH |
Cancel character |
删除前一个字符,以去掉BS的二义性.
|
U |
149 |
95 |
MW |
Message Waiting |
|
V |
150 |
96 |
SPA |
Start of Protected Area |
用于面向块的终端
|
W |
151 |
97 |
EPA |
保护区的结束
|
X |
152 |
98 |
SOS |
Start of String |
开始一个控制字符串,终止于ST (0x9C),可包含除了SOS 或 ST的任何控制符. 不是ISO/IEC 6429第一版的内容。[8]
|
Y |
153 |
99 |
SGCI |
Single Graphic Character Introducer |
不属于ISO/IEC 6429。早期的ISO 10646中用于单个的多字节字符,而不必切换HOP模式。后来删除了,RFC 1345标准也不再保留这一码位名字。[2][6]
|
Z |
154 |
9A |
SCI |
Single Character Introducer |
开始一个可打印字符 (0x20 至 0x7E)与格式描述子 (0x08 至 0x0D)。意图用于定义一个控制功能或可打印字符,无视哪个可打印字符或控制字符集使用中。 国际标准没有实现这个功能,也不是ISO/IEC 6429的一部分。[8]
|
[ |
155 |
9B |
CSI |
Control Sequence Introducer |
用于引入带有参数的控制序列。
|
\ |
156 |
9C |
ST |
String Terminator |
|
] |
157 |
9D |
OSC |
Operating System Command |
开始一个可打印字符(0x20 至 0x7E)与格式描述子 (0x08 至 0x0D), 终止于 ST (0x9C). 这3个控制符用于允许使用带内信令的协议信息,但罕用。
|
^ |
158 |
9E |
PM |
Privacy Message
|
_ |
159 |
9F |
APC |
Application Program Command
|
参见
注释
- ^ The name BELL is assigned by Unicode to the unrelated emoji character 🔔 (U+1F514). While C0 and C1 control characters were not formally named by the Unicode standard itself at the time, this collided with existing use of BELL as the name of this control character in software following the previous versions of UTS#18 (the Unicode Regular Expressions standard),[1] e.g. in Perl.[2] Unicode now accepts ALERT and BEL (but not BELL) as formal aliases for the control character,[3] although the code chart still lists BELL as the ISO 6429 alias,[4] and the corresponding control picture code point is called SYMBOL FOR BELL. Perl subsequently switched to using BELL for the emoji in version 5.18.[5]
- ^ The '\e' escape sequence is not part of ISO C and many other language specifications. However, it is understood by several compilers, including GCC.
参考文献