コンピューティングおよび電気通信において、エスケープ文字とは、文脈上の慣例に基づいて、それに続く文字シーケンスの別の解釈を指定する文字(より正確にはメタ文字)のことです。エスケープ文字とそれに続く文字を合わせて構文単位を形成するものをエスケープシーケンスと呼びます。慣例では、任意の特定の文字コードをシーケンスの接頭辞として定義できます。慣例によっては、バックスラッシュ( \)やアンパサンド( )などの通常の印刷可能な文字を使用するものもあります。また、 ASCIIエスケープ&などの印刷不可能な(制御)文字を使用するものもあります。
電気通信において、エスケープ文字は、後続の文字が異なる方法でエンコードされることを示すために使用されます。これは、不正な文字など、本来であれば通信機器によって認識され、処理されてしまう制御文字を変更するために使用されます。この文脈では、エスケープ文字の使用は「クォーティング」と呼ばれることもあります。
エスケープ文字はそれ自体に意味を持たない場合もあるため、すべてのエスケープシーケンスは2文字以上で構成されます。
エスケープ文字は、多くのプログラミング言語、データ形式、通信プロトコルの構文の一部です。特定のアルファベットにおいて、エスケープ文字の目的は、エスケープ文字が付加されていない同じ文字とは異なる解釈が必要な文字シーケンス(エスケープシーケンスと呼ばれる)を開始することです。
エスケープシーケンスの機能には以下が含まれます。
エスケープ文字とは対照的に、制御文字(例えばキャリッジリターン)は、特別な接頭辞や後続の文字がなくても、それ自体で意味を持ちます。エスケープ文字はそれ自体では意味を持たず、一連の文字の文脈の中でのみ意味を持ちます。
一般的に、エスケープ文字は(デバイス)制御文字の特殊なケースではなく、またその逆も成り立ちません。制御文字を非グラフィック文字、または出力デバイス(プリンタやテキスト端末など)に対して特別な意味を持つ文字と定義する場合、そのデバイス用のエスケープ文字はすべて制御文字となります。しかし、プログラミングで使用されるエスケープ文字(バックスラッシュなど)はグラフィック文字であるため、制御文字ではありません。逆に、 ASCII\の「制御文字」のほとんど(すべてではありませんが)は単独で何らかの制御機能を持つため、エスケープ文字ではありません。
多くのプログラミング言語では、エスケープ文字は制御文字と呼ばれるエスケープシーケンスも形成します。たとえば、改行にはエスケープシーケンスがあります\n。
JavaScript では、\バックスラッシュをエスケープ文字として使用します: [ 1 ] [ 2 ]
\'シングルクォート\"二重引用符\\バックスラッシュ\n改行\r改行\tタブ\bバックスペース\fフォームフィード\v縦タブ(Internet Explorer 9以前のバージョンでは、縦タブ()の代わりに\vとして扱われます。ブラウザ間の互換性が重要な場合は、の代わりにを使用してください。)v\x0B\x0B\v\0ヌル文字( U+0000 <コントロール-0000>(次の文字が10進数でない場合のみ。それ以外の場合は8進数エスケープシーケンスとなる。)\xFF16進数バイトで表される文字FF\vJSON文字列では、およびエスケープ\0文字は使用できません。
サンプルコード:
console.log ( "\n\nを使用すると、\nの後の文字が1行下に移動します" ) console.log ( " \ t\tを使用すると、\tの後の文字がタブ1つ分右に移動します" ) console.log ( "\r\rを使用すると、キャリッジリターンを模倣し、行の先頭に移動します" ) // 一部の端末では画面をクリアするために使用できます。Windowsでは、\n単独ではなく\r\nを使用します。同様のリストは、他のいくつかのプログラミング言語でも使用されています。
ASCII の「エスケープ」文字 ( 8 進数: \033、16 進数: \x1B、10 進数: 、または、シーケンスまたは27で表される) は、多くの出力デバイスで、制御シーケンスまたはエスケープシーケンスと呼ばれる一連の文字の開始に使用されます。通常、このようなシーケンスの最初にエスケープ文字が送信され、後続の文字が通常の文字ではなく制御シーケンスとして解釈されることをデバイスに警告します。その後、1 つ以上の文字が続き、詳細なアクションを指定し、その後デバイスは通常どおり文字を解釈します。たとえば、シーケンス の後に印刷可能な文字 が続くと、Digital Equipment Corporation (DEC) VT102端末はカーソルを画面の 2 行目の 10 番目のセルに移動します。これは後に ANSI X3.64 規格で規定されているANSI エスケープコードに発展しました。エスケープ文字は、Hewlett-Packardプリンタコマンド言語の各コマンドシーケンスの開始にも使用されます。^[\e^[[2;10H
「エスケープ文字」という用語の初期の言及は、ボブ・ベマーのIBMの技術出版物に見られ、彼はASCII文字セットの研究中にこのメカニズムを発明したとされている。[ 3 ]
Escキーは通常、標準的な PC キーボードにあります。しかし、PDA や ASCII 通信を主目的として設計されていないその他のデバイスのキーボードには、通常 Esc キーがありません。DEC VT220シリーズは、メイン キーパッドの上にあるキーの 1 つを使用する代わりに、専用の Esc キーを持たない数少ない人気キーボードの 1 つです。1970年代から 1980 年代のユーザー インターフェイスでは、このキーをエスケープ文字として使用することは珍しくありませんでしたが、現代のデスクトップ コンピュータでは、そのような使用はなくなりました。キーがAltMode[ (代替モード) と識別されることもありました。専用キーがなくても、キーを押しながら入力することでエスケープ文字コードを生成することができましたCtrl。
多くの現代のプログラミング言語では、文字列リテラルの区切り文字として二重引用符(" "")が指定されています。バックスラッシュ(" ")エスケープ文字を使用すると、文字列リテラル内に二重引用符を含める方法が通常 2 つあります。1 つは文字列に埋め込まれた二重引用符の意味を変更する方法(""が "" になる)、もう 1 つは二重引用符の 16 進数値を含む一連の文字の意味を変更する方法(""が ""になる)です。Pascal や Python などの一部の言語では、文字列リテラルの区切り文字として単一引用符("")を使用できます。\\""\x22"'
C、C++、Java、Rubyはいずれも、全く同じ2種類のバックスラッシュエスケープスタイルをサポートしています。PostScript言語とMicrosoft Rich Text Formatもバックスラッシュエスケープを使用します。quoted -printableエンコーディングでは、等号がエスケープ文字として使用されます。
URLとURIでは、非ASCII文字などの特別な意味を持つ文字を引用符で囲むために%エスケープ文字を使用します。SGMLやHTML、XMLなどの派生フォーマットでは、アンパサンド(& &)文字はエスケープ文字として扱われる場合があります。
プログラミング言語によっては、エスケープ文字を必要とせずに、リテラル内で特殊文字を表現する別の方法も提供しています(例えば、区切り文字の衝突を参照)。
ポイントツーポイントプロトコル(PPP) では、0x7Dオクテット( \175、または ASCII: }) をエスケープ文字として使用します。直後のオクテットは、上位レベルのプロトコルに渡される前に とXOR 演算する必要があります。これは、PPP でカプセル化された上位レベルのプロトコルによってこれらのオクテットを送信する必要がある場合、およびリンクが確立されたときにネゴシエートされる他のオクテットの場合、自身と制御文字(PPP でフレームの開始と終了を示すために使用される) の両方に適用されます。つまり、上位レベルのプロトコルが を送信したい場合、 は のシーケンスとして送信され、は として送信されます。0x200x7D0x7E0x7D0x7D 0x5D0x7E0x7D 0x5E
Bourneシェル(sh)では、アスタリスク(* *)と疑問符(* ?)は、グロビングによって展開されるワイルドカード文字です。エスケープ文字が前にない場合、*は、作業ディレクトリ内にピリオドで始まらないすべてのファイル名に展開されます。ただし、そのようなファイルが存在する場合に限ります。そうでない場合は、展開されません。したがって、文字通り「*」という名前のファイルを参照するには、バックスラッシュ(*)を前に付けて、シェルにそのように解釈しないように指示する必要があります。これにより、アスタリスク(*)の解釈が変更されます。**\*
比較する:
同様に、アンパサンド、パイプ、セミコロン(コマンドチェーンに使用)、山括弧(リダイレクトに使用)、丸括弧などの文字は、Bourneシェルでは特別な構文上の意味を持ちます。これらも、別のプログラムへの引数としてそのまま使用するには、エスケープする必要があります(sh(1)マニュアルページ[ 4 ]では「引用」と呼ばれています)。
$ echo (`-´ ) > # エスケープまたは引用符なしbash: 予期しないトークン ``-´' 付近で構文エラー$ echo \(`-´ \)\> # バックスラッシュでエスケープ(`-´) >$ echo '(`-´)>' # シングルクォーテーションで保護されています。上記と同じ効果です(`-´) >$ echo ; ) # 構文エラー$ echo ';)' \;\) # どちらもOKWindowsコマンドライン インタープリタは、特別な意味を持つ予約文字 (特に、、、、、、、)をエスケープするためにキャレット文字 ( )を使用します。[ 5 ] DOSコマンドライン インタープリタは、構文は似ていますが、これをサポートしていません。^&|()<>^
例えば、Windowsのコマンドプロンプトでは、これは構文エラーになります。
C:\> echo < hello world> コマンドの構文が正しくありません。一方、これは次の文字列を出力します。<hello world>
C:\> echo ^< hello world ^> <hello world>Windowsでは、バックスラッシュはパス区切り文字として使用されるため、通常はエスケープ文字として使用できません。PowerShellでは、代わりにバッククォート[ 6 ] ( ` )を使用します。
例えば、以下のコマンド:
PS C:\> echo " `t最初の行`n新しい行" 最初の行新しい行=これらの文字は、エスケープ文字または文字列リテラルの区切り文字として使用されるものとして言及されています。
\x1BASCIIエスケープ文字"\x22文字列リテラルの区切り文字%\x25パーセントエンコーディング&\x26SGML、HTML、XML'\x27文字列リテラルの区切り文字=\x3D引用印刷可能\\x5C多くのプログラミング言語`\x60Windows PowerShell}\x7Dポイントツーポイントプロトコル$、#、*、+、;、、など、さらに多くのものが発生します<。>?@~
この記事は、連邦規格1037C(一般調達局)からのパブリックドメイン資料を組み込んでいます。 2022年1月22日にオリジナルからアーカイブされました。