C0与C1控制字符

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 2022Unicode控制字符覆盖了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 ! @).

SeqDecHex缩写符号名字C描述
^@0000NULNull\0最初用于在穿孔纸带上留下空白位置。后用于需要终端花时间处理的编码(如打印终端处理回车换行)之后的位置。现在用于C语言字符串的终止字节.
^A0101SOHStart of Heading消息头部第一个字符。在Hadoop,用作域分隔符。
^B0202STXStart of Text消息正文第一个字符,也标志着消息头部的最后一个字符。
^C0303ETXEnd of Text消息正文结束。常用作"break"字符(Ctrl-C)以打断或者终止程序或进程。
^D0404EOTEnd of Transmission
^E0505ENQEnquiry信号用于触发对方一个响应,查看对方是否仍然在线。
^F0606ACKAcknowledge对ENQ的响应,或表示成功收到消息。
^G0707BEL[a]Bell, Alert\a最初用作在终端上响铃。后用于在没有物理铃声的终端上蜂鸣。也可用于在屏幕上inverse video (a visual bell).
^H0808BSBackspace\b向左移动游标一个位置。对于输入,这会删除游标左侧的一个字符。对于输出,由于早期计算机技术对于已打印字符不能擦除,该控制字符有时用于叠加打印输出附加符号字符。例如, à可用3字符序列a BS `生成。现在这种方法已经过时了,通常不被支持。
^I0909HTCharacter Tabulation, Horizontal Tabulation\t定位到下一个制表位。
^J100ALFLine Feed\n在打印机、终端上,移动光标到下一行但不改变所在的列的位置。在Unix上,用于表示行结束。在DOSWindows以及很多网络协议表示跟在CR之后作为行结束符。
^K110BVTLine Tabulation, Vertical Tabulation\v定位到下一行的制表位。
^L120CFFForm Feed\f打印机加载下一页。许多编程语言视作空白符或用作代码的逻辑分隔符。某些终端模拟器上清屏。在某些常见文本文件用作分页符,如IETF出版的RFCs。
^M130DCRCarriage Return\r最初,用于把光标移动到所在行的第0列。在classic Mac OS (早于Mac OS X)以及早期的电脑Apple IICommodore 64表示行结束DOS, Windows, 与很多网络协议用于在LF之前共同表示行结束回车键发送这一字符,但很多终端会把它转化为行结束符。
^N140ESOShift Out切换到可选字符集。
^O150FSIShift InShift Out之后,切换回正常字符集。
^P1610DLEData Link Escape使得随后的八进制数被解释为原生数据而不是控制字符或可打印字符。返回到正常使用则依赖于实现。

^Q1711DC1Device Control One (XON)这4个控制字符保留用于设备控制,其解释依赖于所连接的设备。 DC1与DC2主要用于表示设备被激活;DC3 与 DC4主要表示暂停或关闭设备。实际上DC1与DC3 (称作XON 与 XOFF) 成为software flow control的事实标准.
^R1812DC2Device Control Two
^S1913DC3Device Control Three (XOFF)
^T2014DC4Device Control Four
^U2115NAKNegative Acknowledge由一台设备发给与它相连的另一台设备,作为负面响应结果。在点对点系统中,表示前一个接收数据块有错,接收方已经准备接受重传数据块。在多点系统中,NAK表示没有准备好回复轮询。
^V2216SYNSynchronous Idle用于同步传输系统,表示在数据终端设备间同步校准成功,没有数据需要传输。
^W2317ETBEnd of Transmission Block指示数据传输块的结尾。
^X2418CANCancel指示之前的数据有错应该忽视。
^Y2519EMEnd of medium指示纸或磁带的可用部分的结束之处。
^Z261ASUBSubstitute最初用作传输控制字符指示收到混乱或者无效的字符。也被用作当不使用表示有错的带内信令时,特别是采用错误检测与纠正的鲁棒方法,而出错极为罕见情形。DOS, WindowsCP/M的派生系统,用作指示文件结束,包括终端打字输入或存在磁盘上的文本文件。
^[271BESCEscape\e[b]键盘上的Esc将发送此字符。用于软件的人机界面退出屏幕、菜单或模式,或设备控制协议(如打印机或终端)通知随后是一个特殊命令序列而不是正常文本。基于ISO/IEC 2022的系统,即使使用另一个C0控制字符集,这个八进制数总是表示转义字符

^\281CFSFile Separator分隔数据结构的域的分隔符。层次由高到低。
^]291DGSGroup Separator
^^301ERSRecord Separator
^_311FUSUnit Separator
虽然不在C0控制字符集范围内,但ISO/IEC 2022定义了下述两个字符,具有控制符的特点。
 3220SPSpace空格是一个图形字符。
^?1277FDELDelete最初用于穿孔纸带上删除一个字符。因为任何位置的字符都可以被全部穿孔(全1)。VT100兼容终端,按键⌫产生这个字符,常称为backspace,但不对应于PC键盘的delete key。

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+DecHex缩写名字描述
@12880PADPadding Character不属于ISO/IEC 6429 (ECMA-48)。在早期的ISO 10646用作编码非ASCII字符的建议机制。但后来删除了这一功能。[2][6][7]
A12981HOPHigh Octet Preset不属于ISO/IEC 6429 (ECMA-48). 在早期的ISO 10646用作引入遵从ISO 2022的多字节字符序列。但未列入国际标准的实现。RFC 1345标准也不再保留这一码位名字。[2][6]
B13082BPHBreak Permitted Here下一个字符之前可以出现换行。粗略相当于soft hyphen但不意味着必然出现一个分字符。不是ISO/IEC 6429第一版的内容。[8]参见零宽空格.
C13183NBHNo Break Here随后的可打印字符不能在此分开单词。不是ISO/IEC 6429第一版的内容。[8]参见 分字符.
D13284INDIndex向下移动一行。以去除LF的模糊性。1988年过时。1992年从ISO/IEC 6429删除
E13385NELNext Line等价于CR+LF. 用于在一些IBM大型机上标示行的结束
F13486SSAStart of Selected Area用于面向块的终端
G13587ESAEnd of Selected Area
H13688HTSCharacter Tabulation Set
Horizontal Tabulation Set
在此设置一个水平制表位。
I13789HTJCharacter 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.
J1388AVTSLine Tabulation Set
Vertical Tabulation Set
在此设置一个行制表位。
K1398BPLDPartial Line Forward
Partial Line Down
ISO/IEC 6429中产生上角标或者下角标,如对打印机。 e.g., in a printer.
下标使用代码 PLD text PLU ;上标使用代码PLU text PLD.
L1408CPLUPartial Line Backward
Partial Line Up
M1418DRIReverse Line Feed
Reverse Index
N1428ESS2Single-Shift 2下一个字符相应地从G2或G3可打印字符集调用一个字符。对于遵从ISO/IEC 4873 (ECMA-43)的其他C1字符集,这两个八进制码位也是用于这个目的。
O1438FSS3Single-Shift 3
P14490DCSDevice Control String开始一个可打印字符串(0x20 至 0x7E) 与格式效果描述(0x08 至 0x0D), 以ST (0x9C)终止.
Q14591PU1Private Use 1保留给私用
R14692PU2Private Use 2
S14793STSSet Transmit State
T14894CCHCancel character删除前一个字符,以去掉BS的二义性.
U14995MWMessage Waiting
V15096SPAStart of Protected Area用于面向块的终端
W15197EPA保护区的结束
X15298SOSStart of String开始一个控制字符串,终止于ST (0x9C),可包含除了SOS 或 ST的任何控制符. 不是ISO/IEC 6429第一版的内容。[8]
Y15399SGCISingle Graphic Character Introducer不属于ISO/IEC 6429。早期的ISO 10646中用于单个的多字节字符,而不必切换HOP模式。后来删除了,RFC 1345标准也不再保留这一码位名字。[2][6]
Z1549ASCISingle Character Introducer开始一个可打印字符 (0x20 至 0x7E)与格式描述子 (0x08 至 0x0D)。意图用于定义一个控制功能或可打印字符,无视哪个可打印字符或控制字符集使用中。 国际标准没有实现这个功能,也不是ISO/IEC 6429的一部分。[8]
[1559BCSIControl Sequence Introducer用于引入带有参数的控制序列。
\1569CSTString Terminator
]1579DOSCOperating System Command开始一个可打印字符(0x20 至 0x7E)与格式描述子 (0x08 至 0x0D), 终止于 ST (0x9C). 这3个控制符用于允许使用带内信令的协议信息,但罕用。
^1589EPMPrivacy Message
_1599FAPCApplication Program Command

参见编辑

注释编辑

  1. ^ 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]
  2. ^ The '\e' escape sequence is not part of ISO C and many other language specifications. However, it is understood by several compilers, including GCC.

参考文献编辑

  1. ^ Williamson, Karl. Re: PRI #202: Extensions to NameAliases.txt for Unicode 6.1.0. [2018-12-29]. (原始内容存档于2019-06-16). 
  2. ^ 2.0 2.1 2.2 2.3 Ken Whistler. Formal Name Aliases for Control Characters, L2/11-281. Unicode Consortium. July 20, 2011 [2018-12-29]. (原始内容存档于2019-06-14). 
  3. ^ Name Aliases. Unicode Consortium. 
  4. ^ C0 Controls and Basic Latin (PDF). Unicode Consortium. [2018-12-29]. (原始内容存档 (PDF)于2016-05-26). 
  5. ^ charnames. Perl Programming Documentation. [2018-12-29]. (原始内容存档于2019-01-08). 
  6. ^ 6.0 6.1 6.2 Ken Whistler. Why Nothing Ever Goes Away. Unicode Mailing List. 2015-10-05 [2018-12-29]. (原始内容存档于2019-06-16). 
  7. ^ Lunde, Ken. CJKV Information Processing: Chinese, Japanese, Korean, and Vietnamese Computing. O'Reilly. 2008: 244 [2018-12-29]. ISBN 9780596800925. (原始内容存档于2018-12-29). 
  8. ^ 8.0 8.1 8.2 8.3 C1 Control Set of ISO 6429:1983, International Register of Coded Character Sets, Registration Number 77 (PDF). [2018-12-29]. (原始内容存档 (PDF)于2014-07-01).