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 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&nbsp;!&nbsp;@`).

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｜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上，用於表示行結束。在DOS、Windows以及很多網路協議表示跟在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 II 與 Commodore 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, Windows、CP/M的派生系統，用作指示文件結束，包括終端打字輸入或存在磁碟上的文本文件。

`^&#91;`｜27｜1B｜ESC｜Escape｜\e｜鍵盤上的Esc將發送此字符。用於軟體的人機界面退出螢幕、菜單或模式，或設備控制協議（如印表機或終端）通知隨後是一個特殊命令序列而不是正常文本。基於ISO/IEC 2022的系統，即使使用另一個C0控制字符集，這個八進位數總是表示轉義字符。

`^\`｜28｜1C｜FS｜File Separator｜分隔數據結構的域的分隔符。層次由高到低。

`^&#93;`｜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字符的建議機制。但後來刪除了這一功能。

A｜129｜81｜HOP｜High Octet Preset｜不屬於ISO/IEC 6429 (ECMA-48). 在早期的ISO 10646用作引入遵從ISO 2022的多字節字符序列。但未列入國際標準的實現。標準也不再保留這一碼位名字。

B｜130｜82｜BPH｜Break Permitted Here｜下一個字符之前可以出現換行。粗略相當於soft hyphen但不意味著必然出現一個分字符。不是ISO/IEC 6429第一版的內容。參見零寬空格.

C｜131｜83｜NBH｜No Break Here｜隨後的可列印字符不能在此分開單詞。不是ISO/IEC 6429第一版的內容。參見 分字符.

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 SetHorizontal Tabulation Set｜在此設置一個水平制表位。

I｜137｜89｜HTJ｜Character Tabulation With JustificationHorizontal 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 SetVertical Tabulation Set｜在此設置一個行制表位。

K｜139｜8B｜PLD｜Partial Line ForwardPartial Line Down｜在ISO/IEC 6429中產生上角標或者下角標，如對印表機。e.g., in a printer.下標使用代碼 `PLD ''text'' PLU`；上標使用代碼`PLU ''text'' PLD`.

L｜140｜8C｜PLU｜Partial Line BackwardPartial Line Up

M｜141｜8D｜RI｜Reverse Line FeedReverse 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第一版的內容。

Y｜153｜99｜SGCI｜Single Graphic Character Introducer｜不屬於ISO/IEC 6429。早期的ISO 10646中用於單個的多字節字符，而不必切換HOP模式。後來刪除了，標準也不再保留這一碼位名字。

Z｜154｜9A｜SCI｜Single Character Introducer｜開始一個可列印字符 (0x20 至 0x7E)與格式描述子 (0x08 至 0x0D)。意圖用於定義一個控制功能或可列印字符，無視哪個可列印字符或控制字符集使用中。國際標準沒有實現這個功能，也不是ISO/IEC 6429的一部分。

`[`｜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 Unicode Standard
- C0 Controls and Basic Latin
- C1 Controls and Latin-1 Supplement
- Control Pictures
- The Unicode Standard, Version 6.1.0, Chapter 16: Special Areas and Format Characters
- ATIS Telecom Glossary 2007
- De litteris regentibus C1 quaestiones septem or Are C1 characters legal in XHTML 1.0?
- W3C I18N FAQ: HTML, XHTML, XML and Control Codes
- International register of coded character sets to be used with escape sequences