制御文字

コンピューティング電気通信において、制御文字(せいぎょもじ、: control character)とは、文字コードの規格で定義される文字のうち、ディスプレイプリンター・通信装置などに対して、特別な動作(制御)をさせるために使う文字である。制御キャラクタともいい、情報処理用語規格では「制御機能文字」と呼ばれている。

「文字」という名前であるがディスプレイやプリンターには表示されない。そのため、非表示文字(ひひょうじもじ、: non-printing character、印字不可文字)とも言う。それに対し、制御文字以外の表示可能な文字を図形文字: graphic character)という[注釈 1]。図形文字と制御文字は電気信号上は区別がなく、同じデータストリーム上に現われる。これを帯域内信号方式英語版という。

制御文字にどのような文字コードを割り当てるかは、ASCIIEBCDICなどの文字コード体系により異なる。ASCIIでは0から31および127が制御文字に割り当てられている(技術的にはこれをC0制御コード英語版という)。ISO 8859で定義される拡張ASCIIでは、これに128から159までの制御文字を追加した。これはC1制御コード英語版と呼ばれる。

これらの65個の制御文字はUnicodeに引き継がれた。Unicodeではさらに制御文字を追加しているが、これはゼロ幅非接合子のようなフォーマット用文字とは区別される。

EBCDICには、ASCIIの65個の制御文字全てのほか、主としてIBMの周辺機器を制御するための追加の制御文字が含まれている。

[1] 0x00 0x10
0x00 NUL DLE
0x01 SOH DC1
0x02 STX DC2
0x03 ETX DC3
0x04 EOT DC4
0x05 ENQ NAK
0x06 ACK SYN
0x07 BEL ETB
0x08 BS CAN
0x09 TAB EM
0x0A LF SUB
0x0B VT ESC
0x0C FF FS
0x0D CR GS
0x0E SO RS
0x0F SI US
0x7F DEL

歴史

[編集]

モールス符号交信略号英語版は、制御文字の一形態と言える。

1870年に制定されたBaudot Codeで、最初の制御文字 NULDEL が導入された。1901年にドナルド・マレーがキャリッジ・リターン (CR) とラインフィード (LF) を追加することを提案するなど、Baudot Codeには様々な制御文字が追加された。ベル文字は送信相手のベルを鳴らしてオペレータに通知するための文字で、初期のテレタイプ端末で追加された。

表現法

[編集]

制御文字自体は表示できない文字であるため、それを別の方法で表現する必要がある。以下に、ASCIIのベル文字での例を示す。

  • 符号点: 十進法 7、十六進法 0x07
  • 略号(通常は3文字の大文字): BEL
  • 略号で表した表示用の図形文字: Unicode U+2407 (␇), "symbol for bell"
  • ISO 2047で定められた制御文字の記号: Unicode U+237E (⍾), "graphic for bell"
  • キャレット記法(00xxxxxで表される制御文字について、10xxxxxの位置にある大文字のラテン文字とキャレットで表す方法): ^G
  • エスケープシーケンスC言語などのprintf文で用いられる): \a

ASCII

[編集]

ASCIIの制御文字には以下のものを含む。

CS 10進 16進 略号 記号 名称 C言語 説明
^@ 00 00 NUL 空白
Null
\0 元々は、紙テープの末端のデータが書き込まれていない箇所をコンピュータが読み飛ばすために、「何もしない」コードとして定められたものだった。後に、テレタイプ端末がキャリッジ・リターン行送りを物理的にするための時間を稼ぐために入れられるようにもなった。現在では、C言語などで文字列の終端を表すのに用いられる。
^A 01 01 SOH ヘッディング開始
Start of Heading
通信伝文中のヘッダ開始を表す。
^B 02 02 STX テキスト開始
Start of Text
通信伝文中のテキスト部分の開始を表す。
^C 03 03 ETX テキスト終結
End of Text
通信伝文中のテキスト部分の終了を表す。また、Control-Cはプログラムやプロセスに割り込むためにも用いられる。
^D 04 04 EOT 伝送終了
End of Transmission
データ送信側がデータ送信終了時にデータ受信先にEOTを送る。
^E 05 05 ENQ 問い合わせ
Enquiry
データ送信側がデータ送信しようというときに、データ受信側にデータに先立ってENQを送る。データ受信先は、データ受信できる状態であればデータ送信側にACKを送り、データ受信できない状態であればNAKを送る。データ送信側はACKを受信した場合にデータを送り、NAKを受信した場合はデータ送信を断念したり時間を置いて再度ENQ送信するなどの処理を行なう。
^F 06 06 ACK 肯定応答
Acknowledge
受信したデータにCRCなどの異常がない場合や、ENQを受信後にデータ受信ができる状態であれば、送信側にACKを送る。
^G 07 07 BEL ベル
Bell
\a 元々は通信相手の端末のベルを鳴らすのに使われていた。現在では物理的な鐘ではなくビープ音を鳴らす。端末エミュレータでは音を鳴らさずにウィンドウを点滅させるものもある。
^H 08 08 BS 後退
Backspace
\b 元々はカーソルを手前(左)に移動させ、重ね打ちをしてアクセント符号つきの文字を打ち出すために使用されていた。現在では、カーソルを手前(左)に移動させてそこの文字を削除するために用いられる。
^I 09 09 HT 水平タブ
Horizontal Tabulation
\t 水平方向のタブ。テキストデータのデータの区切りに使うこともある。
^J 10 0A LF 改行
Line Feed
\n Line Feedは「行送り」の意味。タイプライターでは、カーソルを桁(水平方向)はそのままで1行下へ移動させる。UNIXでは、LF単独で改行コードとして扱われ、行送りと桁の復帰を行う。MS-DOSWindowsでは、CRとLFを併用する。
^K 11 0B VT 垂直タブ
Vertical Tabulation
\v 垂直方向のタブ。
^L 12 0C FF 書式送り
Form Feed
\f プリンタでは、次のページを給紙する。多くのプログラミング言語では空白として扱われ、コードの論理的区分の分け目として使用される。いくつかの端末エミュレータでは、画面をクリアする。プレーンテキストで記述されるRFCでは、ページ分割英語版文字として使用される。
^M 13 0D CR 復帰
Carriage Return
\r 元はカーソルを同じ行の先頭の桁(左端)へ移動させるのに使われた。macOSよりも前のClassic Mac OSでは、CR単独で改行コードとして扱われ、行送りと桁の移動を行う。MS-DOSWindowsでは、CRとLFを併用する。
^N 14 0E SO シフトアウト
Shift Out
別の文字コードセットに遷移する。
^O 15 0F SI シフトイン
Shift In
通常の文字コードセットに遷移する。
^P 16 10 DLE 伝送制御拡張
Data Link Escape
バイナリ通信(データそのものに制御文字を含むような通信)であることを表すために使う。DLE自体をバイナリデータに含める場合はDLEを2つ重ねて送信する。データ受信側はDLEが2つ重ねられている場合は、DLEというバイナリデータ(制御文字でなく)を受信したと解釈する。こうしたことは、通常のアプリケーションでは意識しなくてもいいことが多い。しかし、プロトコルアナライザなどで通信データを表示した場合、DLEが2つ重ねられていることを知らないと、おかしな通信データと誤解しかねない。
^Q 17 11 DC1 装置制御1
Device Control 1
この4つのコードは装置制御のために予約されている。コードの解釈は接続している装置に依存する。主として、DC1とDC2は装置を作動させる目的で、DC3とDC4は装置を休止または停止させる目的で使用される。実際の用法としてはDC1とDC3をソフトウェアフロー制御英語版のために用いるのがデファクト・スタンダードとなっており、その場合、DC1はXON、DC3はXOFFと呼ばれる。テキストデータ受信側はテキスト送信側に、テキスト送信の一時停止を求めるためXOFF (DC3) を送信し、一時停止を解除するためXON (DC1) を送信する。XOFFを受信したテキストデータ送信側は、XONを受信するまでテキストデータの送信を一時停止する。なお、バイナリ通信ではDC1、DC3によるフロー制御は行なわない。バイナリ通信ではDC1、DC3は単なるバイナリデータであり、制御文字と解釈しないからである。
^R 18 12 DC2 装置制御2
Device Control 2
^S 19 13 DC3 装置制御3
Device Control 3
^T 20 14 DC4 装置制御4
Device Control 4
^U 21 15 NAK 否定応答
Negative Acknowledge
受信したデータにCRCなどの異常があった場合や、ENQを受信後にデータ受信ができる状態でないなら送信側にNAKを送る。
^V 22 16 SYN 同期信号
Synchronous Idle
キャラクタ同期方式の通信で、同期を取るために使う。
^W 23 17 ETB 伝送ブロック終結
End of Transmission Block
通信電文の1ブロック(一連のまとまりのある複数の伝文)が終了したことを表す。
^X 24 18 CAN 取り消し
Cancel
先行するデータにエラーがある、または、無視してほしいことを示す。
^Y 25 19 EM 媒体終結
End of Medium
受信データを記録する媒体(紙や磁気テープなど)が、記録できる範囲の末端まで到達したことを表す。
^Z 26 1A SUB 置換
Substitute Character
本来は、伝送制御文字として、不明瞭な、または、無効な文字を受信したことを表す。しかし、下位レイヤで誤り検出訂正が行われるため、この用途で用いる必要はほぼなく、他の用途で用いられる。テキストファイルのファイル終端 (EOF) を表すのによく使われる。
^[ 27 1B ESC 拡張
Escape
キーボードのEscキーを押すとこの文字がシステムに送られる。ソフトウェアのユーザインターフェースでは、画面・メニュー・モードから出るのに用いられる。プリンタや端末などの装置制御プロトコルでは、後に続く文字を特別な解釈をする(エスケープシーケンス)ことを指示するために用いられる。
^\ 28 1C FS ファイル分離
File Separator
データ構造のフィールドを記録する区切り文字として使われる。階層的な構造の場合、USが最も低いレベル(プレーンテキストのデータアイテム)を分割し、 RS, GS, FSはそれぞれ下のレベルのアイテムからなるグループを分ける。
^] 29 1D GS グループ分離
Group Separator
^^ 30 1E RS レコード分離
Record Separator
^_ 31 1F US ユニット分離
Unit Separator
^? 127 7F DEL 抹消
Delete
元々は紙テープで誤って穿孔した箇所の全部のビットの穴をあけて、データを抹消するのに用いられた。現代のコンピュータでは、カーソルのすぐ右の文字を削除するのに使われる。

Unicode

[編集]

Unicodeでは、制御文字は U+0000 - U+001F(C0制御コード)、U+007F(削除文字)、 U+0080 - U+009F(C1制御コード)である。これらの一般カテゴリ(General Category)英語版の名前は"Cc"である。フォーマット用コードはこれと区別して、一般カテゴリは"Cf"である。Ccの制御文字はUnicodeでは名前がついておらず、正式には"<control-001A>"のように表示される[2]

関連項目

[編集]

脚注

[編集]

注釈

[編集]
  1. ^ ただし、スペースは見た目には何も表示されないが、図形文字の一種である。

出典

[編集]
  1. ^ MS-DOS QBasic v1.1 Documentation. Microsoft 1987-1991.
  2. ^ [General Category Unicode 5.2, Chapter 4]

外部リンク

[編集]