制御文字

印刷不可能な符号化文字の一つ

コンピューティング電気通信において、制御文字(せいぎょもじ、: 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]0x000x10
0x00NULDLE
0x01SOHDC1
0x02STXDC2
0x03ETXDC3
0x04EOTDC4
0x05ENQNAK
0x06ACKSYN
0x07BELETB
0x08BSCAN
0x09TABEM
0x0ALFSUB
0x0BVTESC
0x0CFFFS
0x0DCRGS
0x0ESORS
0x0FSIUS
0x7FDEL

歴史

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

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の制御文字には以下のものを含む。

CS10進16進略号記号名称C言語説明
^@0000NUL空白
Null
\0元々は、紙テープの末端のデータが書き込まれていない箇所をコンピュータが読み飛ばすために、「何もしない」コードとして定められたものだった。後に、テレタイプ端末がキャリッジ・リターン行送りを物理的にするための時間を稼ぐために入れられるようにもなった。現在では、C言語などで文字列の終端を表すのに用いられる。
^A0101SOHヘッディング開始
Start of Heading
通信伝文中のヘッダ開始を表す。
^B0202STXテキスト開始
Start of Text
通信伝文中のテキスト部分の開始を表す。
^C0303ETXテキスト終結
End of Text
通信伝文中のテキスト部分の終了を表す。また、Control-Cはプログラムやプロセスに割り込むためにも用いられる。
^D0404EOT伝送終了
End of Transmission
データ送信側がデータ送信終了時にデータ受信先にEOTを送る。
^E0505ENQ問い合わせ
Enquiry
データ送信側がデータ送信しようというときに、データ受信側にデータに先立ってENQを送る。データ受信先は、データ受信できる状態であればデータ送信側にACKを送り、データ受信できない状態であればNAKを送る。データ送信側はACKを受信した場合にデータを送り、NAKを受信した場合はデータ送信を断念したり時間を置いて再度ENQ送信するなどの処理を行なう。
^F0606ACK肯定応答
Acknowledge
受信したデータにCRCなどの異常がない場合や、ENQを受信後にデータ受信ができる状態であれば、送信側にACKを送る。
^G0707BELベル
Bell
\a元々は通信相手の端末のベルを鳴らすのに使われていた。現在では物理的な鐘ではなくビープ音を鳴らす。端末エミュレータでは音を鳴らさずにウィンドウを点滅させるものもある。
^H0808BS後退
Backspace
\b元々はカーソルを手前(左)に移動させ、重ね打ちをしてアクセント符号つきの文字を打ち出すために使用されていた。現在では、カーソルを手前(左)に移動させてそこの文字を削除するために用いられる。
^I0909HT水平タブ
Horizontal Tabulation
\t水平方向のタブ。テキストデータのデータの区切りに使うこともある。
^J100ALF改行
Line Feed
\nLine Feedは「行送り」の意味。タイプライターでは、カーソルを桁(水平方向)はそのままで1行下へ移動させる。UNIXでは、LF単独で改行コードとして扱われ、行送りと桁の復帰を行う。MS-DOSWindowsでは、CRとLFを併用する。
^K110BVT垂直タブ
Vertical Tabulation
\v垂直方向のタブ。
^L120CFF書式送り
Form Feed
\fプリンタでは、次のページを給紙する。多くのプログラミング言語では空白として扱われ、コードの論理的区分の分け目として使用される。いくつかの端末エミュレータでは、画面をクリアする。プレーンテキストで記述されるRFCでは、ページ分割英語版文字として使用される。
^M130DCR復帰
Carriage Return
\r元はカーソルを同じ行の先頭の桁(左端)へ移動させるのに使われた。macOSよりも前のClassic Mac OSでは、CR単独で改行コードとして扱われ、行送りと桁の移動を行う。MS-DOSWindowsでは、CRとLFを併用する。
^N140ESOシフトアウト
Shift Out
別の文字コードセットに遷移する。
^O150FSIシフトイン
Shift In
通常の文字コードセットに遷移する。
^P1610DLE伝送制御拡張
Data Link Escape
バイナリ通信(データそのものに制御文字を含むような通信)であることを表すために使う。DLE自体をバイナリデータに含める場合はDLEを2つ重ねて送信する。データ受信側はDLEが2つ重ねられている場合は、DLEというバイナリデータ(制御文字でなく)を受信したと解釈する。こうしたことは、通常のアプリケーションでは意識しなくてもいいことが多い。しかし、プロトコルアナライザなどで通信データを表示した場合、DLEが2つ重ねられていることを知らないと、おかしな通信データと誤解しかねない。
^Q1711DC1装置制御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は単なるバイナリデータであり、制御文字と解釈しないからである。
^R1812DC2装置制御2
Device Control 2
^S1913DC3装置制御3
Device Control 3
^T2014DC4装置制御4
Device Control 4
^U2115NAK否定応答
Negative Acknowledge
受信したデータにCRCなどの異常があった場合や、ENQを受信後にデータ受信ができる状態でないなら送信側にNAKを送る。
^V2216SYN同期信号
Synchronous Idle
キャラクタ同期方式の通信で、同期を取るために使う。
^W2317ETB伝送ブロック終結
End of Transmission Block
通信電文の1ブロック(一連のまとまりのある複数の伝文)が終了したことを表す。
^X2418CAN取り消し
Cancel
先行するデータにエラーがある、または、無視してほしいことを示す。
^Y2519EM媒体終結
End of Medium
受信データを記録する媒体(紙や磁気テープなど)が、記録できる範囲の末端まで到達したことを表す。
^Z261ASUB置換
Substitute Character
本来は、伝送制御文字として、不明瞭な、または、無効な文字を受信したことを表す。しかし、下位レイヤで誤り検出訂正が行われるため、この用途で用いる必要はほぼなく、他の用途で用いられる。テキストファイルのファイル終端 (EOF) を表すのによく使われる。
^[271BESC拡張
Escape
キーボードのEscキーを押すとこの文字がシステムに送られる。ソフトウェアのユーザインターフェースでは、画面・メニュー・モードから出るのに用いられる。プリンタや端末などの装置制御プロトコルでは、後に続く文字を特別な解釈をする(エスケープシーケンス)ことを指示するために用いられる。
^\281CFSファイル分離
File Separator
データ構造のフィールドを記録する区切り文字として使われる。階層的な構造の場合、USが最も低いレベル(プレーンテキストのデータアイテム)を分割し、 RS, GS, FSはそれぞれ下のレベルのアイテムからなるグループを分ける。
^]291DGSグループ分離
Group Separator
^^301ERSレコード分離
Record Separator
^_311FUSユニット分離
Unit Separator
^?1277FDEL抹消
Delete
元々は紙テープで誤って穿孔した箇所の全部のビットの穴をあけて、データを抹消するのに用いられた。現代のコンピュータでは、カーソルのすぐ右の文字を削除するのに使われる。

Unicode

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

関連項目

  • ホワイトスペース文字英語版

脚注

注釈

出典

外部リンク