置換文字
英: substitute character、SUB
)は、制御文字の一種である。
本来は、受信側において不明瞭な、または、無効な文字を受信したことを送信側に通知するのに用いる。しかし、下位レイヤで誤り検出訂正が行われるため、この用途で用いる必要はほぼなく、他の用途で用いられる。いくつかのオペレーティングシステムやプログラミング言語においてファイルの終端(EOF)を表すのによく使われる。
ASCIIとUnicodeでは十進数で26、十六進数で1Aに割り当てられている。キャレット記法では ^Z
と表され、Unicodeでは制御文字の図形表現として ␚ (U+241A)が定義されている。
標準的なキーボードは、CtrlとZを同時に押すとこのコードを出力する。
使用法
[編集]CP/M ver.1およびver.2(およびそこから派生したMP/Mなど)では、CP/Mファイルシステム自体でファイルサイズを記録できなかったため、ファイルの終端がわかるようなマークをつける必要があった[1][2]。CP/Mではファイルの末端に0x1Aをつけていた。CP/M ver.3以降(およびそこから派生したConcurrent CP/M, Concurrent DOS, DOS Plusなど)で使われた拡張CP/Mファイルシステムはバイト粒度のファイルに対応しているので[3][4]、これは機能的には必須ではない、後方互換性のための単なる慣例となっていた。
CP/M、86-DOS、MS-DOS、PC DOS、DR-DOSおよびこれらの派生OSでも、文字ストリームの終端を示すのに0x1A(置換文字)が使われている。インタラクティブコマンドラインウインドウにおいてユーザ入力を終了させたり、COPY CON: TYPEDTXT.TXT
のようなコンソールリダイレクションを終了させるのにも使われる。
もはやファイルの終端を示すことは技術的に要求されていないが、多くのテキストエディタやプログラミング言語は、ファイルの末端にこの文字を入れるか、入れるように設定することができる。そのように入れられたEOFを「ソフトEOF」と言い、必ずしもそこが物理的なファイルの終端であるとは限らないが、「これより先に有用なデータはない」ことを示す。実際には、ファイルシステムにおいてソフトEOFより先のデータの実際の終端までに何らかのデータが存在するかもしれない。ファイルの内容をTYPEコマンドやエディタで表示させたときに、その内容は隠される。多くのファイル形式の標準(例えばPNGやGIF)では、置換文字がヘッダの末端に挿入されており、テキストファイルとして表示させたときにヘッダのみが表示されるようになっている。
VisualBasicなどいくつかのプログラミング言語では、ファイルを読み込むプリミティブ(INPUT
、LINE INPUT
など)において置換文字以降を読むことができない。バイナリファイルとして読みこめば置換文字以降も読める。
Unixでは「ジョブ制御」機能を持ったシェルであれば、置換文字(Ctrl-Z)はプロセスを中断(suspend)するシグナル(SIGTSTP)の発生に用いられる。中断されたプロセスはフォアグラウンドモードかバックグラウンドモードで再開するか、終了することができる。