跳至內容

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 ! @).

Seq Dec Hex 縮寫 符號 名字 C 描述
^@ 00 00 NUL Null \0 最初用於在穿孔紙帶上留下空白位置。後用於需要終端花時間處理的編碼(如打印終端處理回車換行)之後的位置。現在用於C語言字符串的終止字節.
^A 01 01 SOH Start of Heading 消息頭部第一個字符。在Hadoop,用作域分隔符。
^B 02 02 STX Start of Text 消息正文第一個字符,也標誌着消息頭部的最後一個字符。
^C 03 03 ETX End of Text 消息正文結束。常用作"break"字符(Ctrl-C)以打斷或者終止程序或進程。
^D 04 04 EOT End of Transmission
^E 05 05 ENQ Enquiry 信號用於觸發對方一個響應,查看對方是否仍然在線。
^F 06 06 ACK Acknowledge 對ENQ的響應,或表示成功收到消息。
^G 07 07 BEL[a] Bell, Alert \a 最初用作在終端上響鈴。後用於在沒有物理鈴聲的終端上蜂鳴。也可用於在屏幕上inverse video (a visual bell).
^H 08 08 BS Backspace \b 向左移動游標一個位置。對於輸入,這會刪除游標左側的一個字符。對於輸出,由於早期計算機技術對於已打印字符不能擦除,該控制字符有時用於疊加打印輸出附加符號字符。例如, à可用3字符序列a BS `生成。現在這種方法已經過時了,通常不被支持。
^I 09 09 HT Character Tabulation, Horizontal Tabulation \t 定位到下一個制表位
^J 10 0A LF Line Feed \n 在打印機、終端上,移動光標到下一行但不改變所在的列的位置。在Unix上,用於表示行結束。在DOSWindows以及很多網絡協議表示跟在CR之後作為行結束符。
^K 11 0B VT Line Tabulation, Vertical Tabulation \v 定位到下一行的制表位。
^L 12 0C FF Form Feed \f 打印機加載下一頁。許多程式語言視作空白符或用作代碼的邏輯分隔符。某些終端模擬器上清屏。在某些常見文本文件用作分頁符,如IETF出版的RFCs
^M 13 0D CR Carriage Return \r 最初,用於把光標移動到所在行的第0列。在classic Mac OS (早於Mac OS X)以及早期的電腦Apple IICommodore 64表示行結束DOS, Windows, 與很多網絡協議用於在LF之前共同表示行結束回車鍵發送這一字符,但很多終端會把它轉化為行結束符。
^N 14 0E SO Shift Out 切換到可選字符集。
^O 15 0F SI Shift In Shift Out之後,切換回正常字符集。
^P 16 10 DLE Data Link Escape 使得隨後的八進制數被解釋為原生數據而不是控制字符或可打印字符。返回到正常使用則依賴於實現。

^Q 17 11 DC1 Device Control One (XON) 這4個控制字符保留用於設備控制,其解釋依賴於所連接的設備。 DC1與DC2主要用於表示設備被激活;DC3 與 DC4主要表示暫停或關閉設備。實際上DC1與DC3 (稱作XON 與 XOFF) 成為software flow control的事實標準.
^R 18 12 DC2 Device Control Two
^S 19 13 DC3 Device Control Three (XOFF)
^T 20 14 DC4 Device Control Four
^U 21 15 NAK Negative Acknowledge 由一台設備發給與它相連的另一台設備,作為負面響應結果。在點對點系統中,表示前一個接收數據塊有錯,接收方已經準備接受重傳數據塊。在多點系統中,NAK表示沒有準備好回復輪詢。
^V 22 16 SYN Synchronous Idle 用於同步傳輸系統,表示在數據終端設備間同步校準成功,沒有數據需要傳輸。
^W 23 17 ETB End of Transmission Block 指示數據傳輸塊的結尾。
^X 24 18 CAN Cancel 指示之前的數據有錯應該忽視。
^Y 25 19 EM End of medium 指示紙或磁帶的可用部分的結束之處。
^Z 26 1A SUB Substitute 最初用作傳輸控制字符指示收到混亂或者無效的字符。也被用作當不使用表示有錯的帶內信令時,特別是採用錯誤檢測與糾正的魯棒方法,而出錯極為罕見情形。DOS, WindowsCP/M的派生系統,用作指示文件結束,包括終端打字輸入或存在磁盤上的文本文件。
^[ 27 1B ESC Escape \e[b] 鍵盤上的Esc將發送此字符。用於軟件的人機界面退出屏幕、菜單或模式,或設備控制協議(如打印機或終端)通知隨後是一個特殊命令序列而不是正常文本。基於ISO/IEC 2022的系統,即使使用另一個C0控制字符集,這個八進制數總是表示轉義字符

^\ 28 1C FS File Separator 分隔數據結構的域的分隔符。層次由高到低。
^] 29 1D GS Group Separator
^^ 30 1E RS Record Separator
^_ 31 1F US Unit Separator
雖然不在C0控制字符集範圍內,但ISO/IEC 2022定義了下述兩個字符,具有控制符的特點。
  32 20 SP Space 空格是一個圖形字符。
^? 127 7F DEL Delete 最初用於穿孔紙帶上刪除一個字符。因為任何位置的字符都可以被全部穿孔(全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+ 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

參見

註釋

  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).