制御文字


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


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


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


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


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
























































[2]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



目次





  • 1 歴史


  • 2 表現法


  • 3 ASCII


  • 4 Unicode


  • 5 関連項目


  • 6 脚注


  • 7 外部リンク




歴史




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


1870年に制定されたBaudot Codeで、最初の制御文字 NUL と DEL が導入された。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言語
説明
^@0000NUL
空白(Null)


元々は、紙テープの末端のデータが書き込まれていない箇所をコンピュータが読み飛ばすために、「何もしない」コードとして定められたものだった。後に、テレタイプ端末がキャリッジ・リターンや行送りを物理的にするための時間を稼ぐために入れられるようにもなった。現在では、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)

n
Line Feedは「行送り」の意味。タイプライターでは、カーソルを桁(水平方向)はそのままで1行下へ移動させる。UNIXでは、LF単独で改行コードとして扱われ、行送りと桁の復帰を行う。MS-DOSやWindowsでは、CRとLFを併用する。
^K110BVT
垂直タブ
(Vertical Tabulation)

v
垂直方向のタブ。
^L120CFF
書式送り
(Form Feed)

f
プリンタでは、次のページを給紙する。多くのプログラミング言語では空白として扱われ、コードの論理的区分の分け目として使用される。いくつかの端末エミュレータでは、画面をクリアする。プレーンテキストで記述されるRFCでは、ページ分割(英語版)文字として使用される。
^M130DCR
復帰
(Carriage Return)

r
元はカーソルを同じ行の先頭の桁(左端)へ移動させるのに使われた。macOSよりも前のClassic Mac OSでは、CR単独で改行コードとして扱われ、行送りと桁の移動を行う。MS-DOSやWindowsでは、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>"のように表示される[3]



関連項目


  • C0とC1の制御コード(英語版)

  • エスケープシーケンス

  • 帯域内信号方式(英語版)

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

  • 図形文字


脚注



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


  2. ^ MS-DOS QBasic v1.1 Documentation. Microsoft 1987-1991.


  3. ^ [General Category Unicode 5.2, Chapter 4]


外部リンク



  • ISO IR 1 ISO 646のC0文字セット(PDF)

Popular posts from this blog

Top Tejano songwriter Luis Silva dead of heart attack at 64

ReactJS Fetched API data displays live - need Data displayed static

Evgeni Malkin