什么是控制字符介绍
控制字符(Control Character),是出现于特定的信息文本中,表示某一控制功能的字符。
在ASCII码中,第0~31号及第127号(共33个)是控制字符或通讯专用字符,如控制符:LF(换行)、CR(回车)、FF(换页)、DEL(删除)、BS(退格)、BEL(振铃)等;通讯专用字符:SOH(文头)、EOT(文尾)、ACK(确认)等。
控制字符其他信息
Seq |
十进 |
十六进 |
缩写 |
字符名 |
---|---|---|---|---|
00 |
0x00 |
NUL |
Null (空) |
|
^A |
01 |
0x01 |
SOH |
Start of Heading (报头开始) |
^B |
02 |
0x02 |
STX |
Start of Text (正文开始) |
^C |
03 |
0x03 |
ETX |
End of Text (正文结束) |
^D |
04 |
0x04 |
EOT |
End of Transmission (传输结束) |
^E |
05 |
0x05 |
ENQ |
Enquiry (查询) |
^F |
06 |
0x06 |
ACK |
Acknowledge (确认) |
^G |
07 |
0x07 |
BEL |
Bell (振铃) |
^H |
08 |
0x08 |
BS |
Backspace (退格) |
^I |
09 |
0x09 |
HT |
Horizontal Tab (水平制表) |
^J |
10 |
0x0A |
LF |
Line Feed (换行) |
^K |
11 |
0x0B |
VT |
Vertical Tab (垂直制表) |
^L |
12 |
0x0C |
FF |
Form Feed (换页) |
^M |
13 |
0x0D |
CR |
Carriage Return (回车) |
^N |
14 |
0x0E |
SO |
Shift Out (移出) |
^O |
15 |
0x0F |
SI |
Shift In (移入) |
^P |
16 |
0x10 |
DLE |
Data link Escape (数据链路转义) |
^Q |
17 |
0x11 |
DC1 |
Device Control 1 (设备控制1) |
^R |
18 |
0x12 |
DC2 |
Device Control 2 (设备控制2) |
^S |
19 |
0x13 |
DC3 |
Device Control 3 (设备控制3) |
^T |
20 |
0x14 |
DC4 |
Device Control 4 (设备控制4) |
^U |
21 |
0x15 |
NAK |
Negative Acknowledge (否认) |
^V |
22 |
0x16 |
SYN |
Synchronous Idle (同步空闲) |
^W |
23 |
0x17 |
ETB |
End of Transmission Block (传输块结束) |
^X |
24 |
0x18 |
CAN |
Cancel (取消) |
^Y |
25 |
0x19 |
EM |
End of Medium (介质结束) |
^Z |
26 |
0x1A |
SUB |
Substitute (替换) |
^ |
29 |
0x1D |
GS |
Group Separator (分组符) |
^^ |
30 |
0x1E |
RS |
Record Separator (记录分隔符) |
^_ |
31 |
0x1F |
US |
Unit Separator (单元分隔符) |
127 |
0x7F |
DEL |
Delete (删除) |
兼容的八位ISO/IEC 8859-1加上了从ISO/IEC 6429定义的从128到159的32个代码,位于0x80-0x9F。
十进 |
十六进 |
缩写 |
字符名 |
---|---|---|---|
128 |
0x80 |
PAD |
Padding Character(填充字符) |
129 |
0x81 |
HOP |
High Octet Preset(高字节前置) |
130 |
0x82 |
BPH |
Break Permitted Here(此处允许中断) |
131 |
0x83 |
NBH |
No Break Here(此处禁止中断) |
132 |
0x84 |
IND |
Index(索引) |
133 |
0x85 |
NEL |
Next Line(下一行) |
134 |
0x86 |
SSA |
Start of Selected Area(选择区域开始) |
135 |
0x87 |
ESA |
End of Selected Area(选择区域结束) |
136 |
0x88 |
HTS |
Horizontal Tab Set(水平制表设置) |
137 |
0x89 |
HTJ |
Horizontal Tab Justified(水平制表调整) |
138 |
0x8A |
VTS |
Vertical Tab Set(垂直制表设置) |
139 |
0x8B |
PLD |
Partial Line Forward(部分行前移) |
140 |
0x8C |
PLU |
Partial Line Backward(部分行后移) |
141 |
0x8D |
RI |
Reverse Line Feed(逆向馈行) |
142 |
0x8E |
SS2 |
Single-Shift 2 (单个移动 2) |
143 |
0x8F |
SS3 |
Single-Shift 3(单个移动 3) |
144 |
0x90 |
DCS |
Device Control String(设备控制串) |
145 |
0x91 |
PU1 |
Private Use 1(私用1) |
146 |
0x92 |
PU2 |
Private Use 2(私用2) |
147 |
0x93 |
STS |
Set Transmit State(发送规则设置) |
148 |
0x94 |
CCH |
Cancel Character(取消字符) |
149 |
0x95 |
MW |
Message Waiting(消息等待) |
150 |
0x96 |
SPA |
Start of Protected Area(保护区域开始) |
151 |
0x97 |
EPA |
End of Protected Area(保护区域结束) |
152 |
0x98 |
SOS |
Start of String(串开始) |
153 |
0x99 |
SGCI |
Single Graphic Char Intro(单个图形字符描述) |
154 |
0x9A |
SCI |
Single Char Intro(单个字符描述) |
155 |
0x9B |
CSI |
Control Sequence Intro(控制顺序描述) |
156 |
0x9C |
ST |
String Terminator(串终止) |
157 |
0x9D |
OSC |
OS Command(操作系统指令) |
158 |
0x9E |
PM |
Private Message(私讯) |
159 |
0x9F |
APC |
App Program Command(应用程序命令) |
控制字符键盘映射
基于ASCII的键盘上有个标为“Control”或\"Ctrl\"(有时也作\"Cntl\")的键,其用法非常类似于换档键,即与其他字母或符号键一起按下。通过这种方式使用控制键将生成同时按下的字符键的的ASCII编码字节的7位中,左起的两个字元强制定为0;从而产生出32个ASCII控制码之一。例如,按下CTRL和字母G(十进制编码为71,二进制为01000111),产生编码7(振铃符,十进制编码7,或二进制00000111)。
键盘上有些单个键能产生控制码。例如标为“Backspace”的键通常产生编码8,“Tab”是编码9,“Enter”或“Return”是编码13(有些键盘上“Enter”可能是编码10)。
键盘上有些键没有对应的ASCII字符或控制字符,例如光标控制键/箭头键和字处理功能键。这些键盘和其所连接的计算机通过三种方法通信:将一些在其他情况下不使用的控制字符定义新的用法、使用其他一些非ASCII的编码、或者使用由多个字符构成的控制序列。连接到独立的个人电脑上的键盘通常用前两种方法之一或两者都用,哑终端通常是使用控制序列。
控制字符设计目的
控制字符被设计分为若干组:打印和显示控制、数据结构化、传输控制、以及其他零散用途。
控制字符打印和显示控制
打印控制字符最先用于控制作为最早的输出设备的打印机的物理机件。回车(CR)意为将字符放置于纸边开始打印处(可能要移动到下一行,也可能不是)。换行(LF)表示将下个字符放置于新行出现的方向上的下一行处(也可能同时要移动到行起始处,也可能不是)。垂直和水平制表(VT/HT)则请求打印机将打印头移动到阅读方向上的下个制表位置。换页(FF)则开始一张新纸。退格(BS)将下个打印位置后退一个字符以便打印机可进行叠打而产生特殊字符(例如在文字下加下划线,在早期的字符打印机上是先打出文字后再用退格符将打印头退后,再叠打出下划线的)。移入(SI)和移出(SO)用于选择替换的字符集、字体、下划线或其他打印模式,然而更常见的是使用其他的转义序列来实现这些目的。
随着不使用纸张打印、并在字符放置、删除等方面提供了更多灵活性的终端机的出现,打印控制码也进一步适应了这些变化。例如馈页表示清除屏幕而非馈送下一张白纸。人们设计了更复杂的转义序列来应用新终端和新打印机功能的优点。单个字符的控制码已经不够用来支持新外围设备的所有功能了,控制字符和转义序列之间的差别也开始变得模糊。
控制字符数据结构化
分隔符(组、记录等)用于将数据结构化,通常用于磁带,为的是模拟穿孔卡片。介质结束(EM)意为警告磁带(或其他介质)即将到达末尾。
控制字符传输控制
传输控制字符是设计用来将数据包结构化以及控制在传输发生错误时何时进行重传的。
报头开始(SOH)用于标记数据包中的非数据部分——即含有地址和其他内务数据报文的部分。正文开始(SOT)标记报头的结束和正文的开始。正文结束(EOT)标记报文数据的结束。标准的常规是在正文结束符之前的两个字符处填入报文的校验和或CRC。
转义符(ESC)用于在报文中放在一个正常情况下会被解释为控制字符的二进制值前。例如二进制值27的正确用法是ESC ESC。
替换符(SUB)用于请求将下个可打印字符转换为一个二进制值,通常是将第5位置零。由于一些传输介质(例如由打字机产生的纸张)仅能传输可打印的字符,因此用于这类情况时这样做很方便。
取消符(CAN)中止一个包的传输。否认符(NAK)请求重新传输一个包。确认符(ACK)表示传输内容被正确地接收。
当传输介质使用半双工(指某一时刻只能进行一个方向的传输)时,通常有一可在任意时间传输数据的主站和一个或多个可在获得准许后进行传输的从站。主站使用查询符(ENQ)来要求从站发送其下条报文。从站通过发出传输结束符(EOT)来表示其已完成了传输。
设备控制码原本是不特定的,是对每种设备定义不同的。然而在数据传输中一种普遍的需要是当接收方不能接收更多数据时需要请求发送方立即暂停传输。数据设备公司发明了一套协议,其用19(DC3,也即CTRL-S或XOFF)来停止传输,并用17(DC1,也即CTRL-Q或XON)来开始传输。籍此制造商们能不必在数据缆线中用专门的传输控制线来控制传输,这节约了成本且由于减少了缆线中连接的数量也增加了作业的可靠程度。
数据链路转义(DLE)告诉数据链路的另一端结束一个会话。
控制字符零散用途
许多ASCII控制字符是为当时使用而很少见到的设备而设计的。例如编码22,同步空闲(SYN),原本用于同步调制解调器(其必须连续发送数据)在没有数据要传送时发送。(系统一般使用起始位来告知要传送的字的开始。)
编码0,空字符,是个特例。它在纸带中就是那些没有穿孔的地方,因此把它作为不存在的字符来对待是很方便的。
编码127同样是个特例。在二进制编码中它的所有位都是1,这使得它可方便地用来清除作为当时普遍使用的存储介质的纸带中的一段,把要清除的部分全部穿孔就成了DEL字符。纸带很快被废弃了,因此这个特色也几乎不用了。
然而由于其编码处于其他可打印的字符占用的区域中,许多计算机把它作为一个额外的可打印字符来使用(通常是一个实心的黑色方块字符,可用叠打来盖除文字)。