制御文字

ウィキペディアから、無料の百科事典
ナビゲーションにジャンプ 検索にジャンプ

コンピューティングおよびテレコミュニケーションでは、制御文字または非印刷文字NPC)は、文字セット内のコードポイント数字)であり、書かれた記号を表しません。これらは、テキストに記号を追加する以外の効果を引き起こす帯域内信号方式として使用されます。他のすべての文字は、おそらく「スペース」文字を除いて、主に印刷印刷可能、またはグラフィック文字です( ASCII印刷可能文字を参照)。

コード32(技術的にはC0制御コードセット)の下のASCIIテーブルのすべてのエントリは、テキストの行を区切るために使用されるCRとLFを含め、この種のものです。コード127(DEL)も制御文字です[要出典]ISO 8859で定義された拡張ASCIIセットは、制御文字としてコード128〜159を追加しました。これは主に、上位ビットが削除されても印刷文字がC0制御コードに変更されないようにするために行われましたが、ここでいくつかの割り当てがあります。特にNELこの2番目のセットはC1セットと呼ばれます。

これらの65の制御コードはUnicodeに引き継がれましたUnicodeは、コントロールと見なすことができる文字をさらに追加しましたが、これらの「フォーマット文字」(ゼロ幅非接合子など)と65個の制御文字を 区別します。

拡張バイナリコード化10進交換コード(EBCDIC)文字セットには、65の制御コードが含まれています。これには、すべてのASCII制御コードに加えて、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 できる
0x09 HT EM
0x0A LF サブ
0x0B VT ESC
0x0C FF FS
0x0D CR GS
0x0E それで RS
0x0F SI 我ら
0x7F DEL

歴史

モールス信号の手続き型記号、制御文字の形式です。

制御文字の形式は、1870年のBaudotコードで導入されました:NULおよびDEL。1901年のマレーコードにはキャリッジリターン(CR)とラインフィード(LF)が追加され、他のバージョンのBaudotコードには他の制御文字が含まれていました。

オペレーターに警告するためにベルを鳴らしたベル文字(BEL)も、初期のテレタイプ制御文字でした。

制御文字は「フォーマットエフェクタ」とも呼ばれています。

ASCIIで

まだ一般的に使用されているASCIIの制御文字は次のとおりです。

制御文字は、実行中のプロセスを中断するコード3(テキスト終了文字、ETX、 )やコード4(送信終了文字、EOT、など、ユーザーが入力したときに何かを実行していると説明できます。テキスト入力を終了するか、Unixシェルを終了するために使用されます。これらの使用法は通常、テキスト出力中の使用法とはほとんど関係がなく、最近のシステムでは通常、コード番号の送信をまったく必要としません(代わりに、プログラムはユーザーがCtrlキーを押しているという事実を取得します'C'でマークされたキーを押します)。 ^C^D

かなりの数の制御文字が定義されていました(ASCIIでは33文字、ECMA-48標準ではさらに32文字が追加されています)。これは、初期の端末には非常に原始的な機械的または電気的制御があり、あらゆる種類の状態記憶APIの実装に非常に費用がかかるため、関数ごとに異なるコードが要件のように見えたためです。コードのシーケンスを解釈して機能を実行することがすぐに可能になり、安価になり、デバイスメーカーは何百ものデバイス命令を送信する方法を見つけました。具体的には、ASCIIコード27(エスケープ)を使用し、その後に「制御シーケンス」または「エスケープシーケンス」と呼ばれる一連の文字を使用しました。このメカニズムはBobBemerによって発明されました、ASCIIの父。たとえば、コード27のシーケンスの後に印刷可能な文字「[2; 10H」が続くと、DECVT -102端末はカーソルを画面の2行目の10番目のセルに移動します。これらのシーケンスには、特にANSIX3.64などのいくつかの標準が存在します。しかし、使用における非標準のバリエーションの数は多く、特にプリンタ間では、標準化団体が追いつくことができるよりもはるかに速く技術が進歩しています。

Unicodeで

Unicodeでは、「制御文字」はU + 0000-U + 001F(C0コントロール)、U + 007F(削除)、およびU + 0080-U + 009F(C1コントロール)です。それらの一般的なカテゴリは「Cc」です。書式設定コードは、一般カテゴリ「Cf」で区別されます。Cc制御文字には、Unicodeでは名前がありませんが、代わりに「<control-001A>」などのラベルが付けられています。[2]

表示

非印刷文字を表示するためのいくつかの手法があり、 ASCIIエンコーディング のベル文字で示すことができます。

  • コードポイント:10進数7、16進数0x07
  • 略語、多くの場合3つの大文字:BEL
  • 略語を要約した特殊文字:Unicode U + 2407(␇)、「ベルの記号」
  • ISO 2047グラフィック表現:Unicode U + 237E (⍾)、「ベルのグラフィック」
  • ASCIIでのキャレット記法。コードポイント00xxxxxは、コードポイント10xxxxxのキャレットとそれに続く大文字として表されます。^ G
  • C / C ++文字列コードのようエスケープシーケンス: \ a\ 007\ x07など。

制御文字をキーボードにマップする方法

ASCIIベースのキーボードには、「 Control 」、「Ctrl」、または(まれに)「Cntl」というラベルの付いたキーがあります。これは、Shiftキーのように使用され、別の文字または記号キーと組み合わせて押されます。一実施形態では、制御キーは、それが組み合わされて押される(一般に)大文字のコードの64桁下にコードを生成する(すなわち、(一般に)大文字の10進数のASCIIコード値から64を引く)。もう1つの実装は、キーによって生成されたASCIIコードを取得し、ビット単位で31とAND演算して、ビット6と7をゼロにすることです。たとえば、「control」と文字「g」または「G」(8進数のコード107または基数10の71 )を押すと)、コード7を生成します(ベル、基数10の7、またはバイナリの00000111)。NULL文字(コード0)はCtrl- @で表され、「@」はASCII文字セットの「A」の直前のコードです。便宜上、多くの端末はCtrl- @のエイリアスとしてCtrl-Spaceを受け入れます。いずれの場合も、これにより0〜31の32個のASCII制御コードの1つが生成されます。このアプローチでは、値(コード127)のためにDEL文字を表すことはできませんが、Ctrl-?'?'から64を引くため、この文字によく使用されます。-1を与えます。これは、7ビットにマスクされている場合は127です。[3]

コントロールキーを押したままにすると、 ShiftキーまたはCaps Lockキーの状態に関係なく、文字キーは同じ制御文字を生成します。つまり、キーが大文字と小文字のどちらを生成したかは関係ありません。スペース、グラフィック文字、および数字キー(ASCIIコード32〜63)を使用したコントロールキーの解釈は、システムによって異なります。コントロールキーを押していない場合と同じ文字コードを生成するものもあります。他のシステムでは、コントロールキーを押したままにすると、これらのキーが制御文字に変換されます。非ASCII(「外部」)キーを使用したコントロールキーの解釈も、システムによって異なります。

制御文字は、多くの場合、キャレット(^)を印刷してから、制御文字に64を加えた値を持つASCII文字を印刷することにより、キャレット記法と呼ばれる印刷可能な形式にレンダリングされます。したがって、文字キーを使用して生成された制御文字は大文字で表示されます。手紙の形。たとえば、^ Gはコード7を表します。これは、Ctrlキーを押しながらGキーを押すことによって生成されます。

キーボードには通常、制御文字コードを生成するいくつかの単一キーがあります。たとえば、「Backspace」というラベルの付いたキーは通常、コード8、「Tab」コード9、「Enter」または「Return」コード13を生成します(ただし、一部のキーボードは「Enter」のコード10を生成する場合があります)。

多くのキーボードには、カーソル制御矢印やワードプロセッシング機能など、ASCII印刷可能文字や制御文字に対応しないキーが含まれています。関連するキー押下は、次の4つの方法のいずれかによってコンピュータプログラムに伝達されます。ASCII以外のエンコーディングを使用する。複数文字の制御シーケンスを使用する。または、文字の生成以外に追加のメカニズムを使用します。「ダム」コンピュータ端末は通常、制御シーケンスを使用します。1980年代に製造されたスタンドアロンのパーソナルコンピュータに接続されたキーボードは、通常、最初の2つの方法のいずれか(または両方)を使用します。最新のコンピューターキーボードはスキャンコードを生成します押された特定の物理キーを識別します。次に、コンピュータソフトウェアは、上記の4つの方法のいずれかを含め、押されたキーの処理方法を決定します。

設計目的

制御文字は、印刷および表示制御、データ構造化、伝送制御、およびその他のいくつかのグループに分類されるように設計されています。

印刷と表示の制御

印刷制御文字は、最も初期の出力デバイスであるプリンターの物理的メカニズムを制御するために最初に使用されました。このアイデアの初期の実装は、帯域外の ASAキャリッジ制御文字でした。その後、制御文字が印刷されるデータのストリームに統合されました。キャリッジリターン文字(CR)は、このようなデバイスに送信されると、書き込みが開始される用紙の端に文字を配置します(印刷位置を次の行に移動する場合と移動しない場合があります)。改行文字(LF / NL)により、デバイスは次の行に印刷位置を配置します。デバイスとその構成によっては、印刷位置を次の行の先頭(左から右の場合は左端の位置)に移動する場合もありますが、移動しない場合もあります。西洋言語で使用されるアルファベットなどのスクリプト、および右から左への右端の位置ヘブライ語やアラビア語のアルファベットなどのスクリプト)。垂直および水平タブ文字(VTおよびHT / TAB)により、出力デバイスは印刷位置を読み取り方向の次のタブストップに移動します。フォームフィード文字(FF / NP)は新しい用紙を開始し、最初の行の先頭に移動する場合と移動しない場合があります。バックスペース文字(BS)は、印刷位置を1文字スペース後方に移動します。プリンタでは、これが最も頻繁に使用されるため、プリンタは文字をオーバープリントして、通常は使用できない他の文字を作成できます。端末やその他の電子出力デバイスでは、多くの場合、消去するバックスペース(BS、SP、BSシーケンスなど)を破棄できるソフトウェア(またはハードウェア)構成の選択肢と、そうでない非破壊バックスペースの選択肢があります。シフトインおよびシフトアウト文字(SIおよびSO)は、代替文字セット、フォント、下線、またはその他の印刷モードを選択しました。エスケープシーケンスは、同じことを行うためによく使用されました。

紙に物理的に印刷せず、画面の配置や消去などの柔軟性を高めるコンピューター端末の出現により、印刷制御コードが採用されました。たとえば、フォームフィードは通常、画面をクリアし、移動する新しい用紙ページはありません。新しい端末、そして実際には新しいプリンタの柔軟性を活用するために、より複雑なエスケープシーケンスが開発されました。制御文字の概念は常にいくらか制限されていましたが、新しい、はるかに柔軟なハードウェアで使用すると非常に制限されていました。制御シーケンス(エスケープシーケンスとして実装されることもあります)は、新しい柔軟性とパワーに一致する可能性があり、標準的な方法になりました。ただし、選択できる標準シーケンスは多種多様であり、現在も残っています。

データ構造化

セパレーター(ファイル、グループ、レコード、および単位:FS、GS、RS、およびUS)は、パンチカードをシミュレートするために、通常はテープ上のデータを構造化するために作成されましたEnd of media(EM)は、テープ(または他の記録媒体)が終了していることを警告します。多くのシステムはデータの構造化にCR / LFとTABを使用しますが、構造化が必要なデータで区切り文字の制御文字に遭遇する可能性があります。区切り文字の制御文字はオーバーロードされません。データを構造化されたグループに分ける以外に、それらの一般的な使用法はありません。それらの数値は、単語の区切り文字として、グループのメンバーと見なすことができるスペース文字と連続しています。

トランスミッションコントロール

伝送制御文字は、データストリームを構造化し、伝送エラーが発生した場合に、必要に応じて再伝送または正常な障害を管理することを目的としていました。

見出し(SOH)文字の開始は、データストリームの非データセクション(アドレスおよびその他のハウスキーピングデータを含むストリームの一部)をマークすることでした。テキスト文字の開始(STX)は、ヘッダーの終わり、およびストリームのテキスト部分の開始を示します。テキストテキストの終わり(ETX)は、メッセージのデータの終わりを示します。広く使用されている規則は、エラー検出の目的で、ETXの前にある2つの文字をチェックサムまたはCRCにすることです。送信ブロック文字(ETB)の終わりは、データのブロックの終わりを示すために使用され、データは送信の目的でそのようなブロックに分割されました。

エスケープ文字(ESC)は、次の文字を「引用」することを目的としていました。それが別の制御文字である場合、制御機能を実行する代わりにそれを出力します。今日、この目的で使用されることはほとんどありません。コンテキストに応じて、 さまざまな印刷可能な文字が表示可能な「エスケープ文字」として使用されます。

置換文字(SUB)は、通常、ビット5をゼロに設定することにより、印刷可能な文字から別の値への次の文字の変換を要求することを目的としていました。一部のメディア(タイプライターで作成された用紙など)は印刷可能な文字しか送信できないため、これは便利です。ただし、ファイルがテキストモードで開かれているMS-DOSシステムでは、「テキストの終わり」または「ファイルの終わり」は、他の人に一般的なCtrl-CまたはCtrl-Dではなく、このCtrl-Z文字でマークされます。オペレーティングシステム。

キャンセル文字(CAN)は、前の要素を破棄する必要があることを示しています。否定応答文字(NAK)は、通常、受信が問題であり、多くの場合、現在の要素を再送信する必要があることを示すための明確なフラグです。確認応答文字(ACK)は通常、現在の要素で問題が検出されなかったことを示すフラグとして使用されます。

伝送媒体が半二重(つまり、一度に一方向にしか送信できない)の場合、通常、いつでも送信できるマスターステーションと、許可を得たときに送信する1つ以上のスレーブステーションがあります。照会文字(ENQ)は通常、マスターステーションがスレーブステーションに次のメッセージの送信を要求するために使用されます。スレーブステーションは、送信終了文字(EOT)を送信することにより、送信が完了したことを示します。

デバイス制御コード(DC1からDC4)は元々汎用であり、各デバイスで必要に応じて実装されていました。ただし、データ送信の一般的な必要性は、受信者が一時的にそれ以上データを受け入れることができなくなったときに送信者に送信を停止するように要求することです。Digital Equipment Corporationは、19(デバイス制御3文字(DC3)、別名control-S、またはXOFF)を「S」トップトランスミッションに使用し、17(デバイス制御1文字(DC1)、別名制御)を使用する規則を発明しました。 -Q、またはXON)送信を開始します。それは非常に広く使用されているので、ほとんどの人はそれが公式のASCIIの一部ではないことに気づいていません。ただし、この手法は実装されているため、伝送管理専用のデータケーブルに追加の配線を追加する必要がないため、コストを節約できます。ただし、潜在的なデッドロック状態を回避するために、このような伝送フロー制御信号を使用するための適切なプロトコルを使用する必要があります。

データリンクエスケープ文字(DLE)は、次の文字がSTXやETXなどの制御文字であることをデータリンクのもう一方の端に通知することを目的としています。たとえば、パケットは次のように構成されます(DLE)<STX> <PAYLOAD>(DLE)<ETX>。

その他のコード

コード7(BEL)は、受信端末で可聴信号を発生させることを目的としています。[4]

ASCII制御文字の多くは、今日ではあまり見られない当時のデバイス用に設計されました。たとえば、コード22「synchronousidle」(SYN)は、送信する実際のデータがないときに、元々同期モデム(常にデータを送信する必要がある)によって送信されました。(最新のシステムは通常、送信されたワードの開始をアナウンスするためにスタートビットを使用します。これは非同期通信の機能です。 同期通信リンクはメインフレームでより頻繁に見られ、メインフレームを別のメインフレームに接続するために企業のリース回線上で実行されていました。メインフレームまたはおそらくミニコンピューター。)

コード0(ASCIIコード名NUL)は特殊なケースです。紙テープでは、穴がない場合です。これを他の意味のない塗りつぶし文字として扱うと便利です。NUL文字の位置には穴が開けられていないため、後で他の文字に置き換えることができます。通常、エラーを修正したり、後で利用できる情報を挿入したりするために、スペースを予約するために使用されていました。または別の場所で。コンピューティングでは、固定長レコードのパディングによく使用され、より一般的には、文字列の終わりをマークするために使用されます。

コード127(DEL、別名「rubout」)も同様に特殊なケースです。その7ビットコードはバイナリでオールビットオンであり、オーバーパンチすると紙テープの文字セルを本質的に消去します。ASCIIが開発されたとき、紙テープは一般的な記憶媒体であり、計算の歴史はBiuroSzyfrówの第二次世界大戦の暗号解読装置にまでさかのぼります。紙テープは1970年代に時代遅れになったため、ASCIIのこの巧妙な側面は、その後ほとんど使用されませんでした。一部のシステム(元のAppleなど)は、それをバックスペースに変換しました。しかし、そのコードは他の印刷可能な文字が占める範囲内にあり、公式に割り当てられたグリフがないため、多くのコンピューター機器ベンダーはそれを追加の印刷可能な文字(多くの場合、オーバープリントによるテキストの消去に役立つ真っ黒な「ボックス」文字)として使用しました。インク付き)。

消去不可能なプログラマブルROMは通常、可融性要素の配列として実装され、各要素はビットを表します。ビットは、通常は1から0に一方向にしか切り替えることができません。このようなPROMでは、DELおよびNUL文字は、パンチテープで使用されたのと同じ方法で使用できます。1つは後で書き込むことができる無意味なフィルバイトを予約し、もう1つは書き込まれたバイトを無意味なフィルバイトに変換します。1を0に切り替えるPROMの場合、NULとDELの役割は逆になります。また、DELは7ビット文字でのみ機能します。これは現在ほとんど使用されていません。8ビットコンテンツの場合、DELの代わりに、一般にノーブレークスペース文字として定義される文字コード255を使用できます。

多くのファイルシステムは、予約された機能を持っている可能性があるため 、ファイル名に制御文字を含めることを許可していません。

も参照してください

脚注と参考文献

  1. ^ MS-DOS QBasicv1.1ドキュメント。Microsoft1987-1991。
  2. ^ 「4.8名前」。Unicode標準バージョン13.0–コア仕様 (PDF)Unicode、Inc。
  3. ^ 「ASCII文字」2009年10月28日にオリジナルからアーカイブされました2010年10月8日取得
  4. ^ ネットワーク交換用のASCII形式1969年10月。doi10.17487 / RFC0020RFC20 _ 2013年11月3日取得 4.1章と5.2章の制御文字の構造と意味を説明する古いRFC

外部リンク