「エスケープ文字」の版間の差分
m bot: 解消済み仮リンクPrinter Command Languageを内部リンクに置き換えます |
|||
51行目: | 51行目: | ||
|- |
|- |
||
| style="width:25px;"| <!--indented-->|| |
| style="width:25px;"| <!--indented-->|| |
||
< |
<syntaxhighlight lang="bash"> |
||
rm * # カレントディレクトリの全てのファイルを消去する |
rm * # カレントディレクトリの全てのファイルを消去する |
||
rm \* # * という名前のファイルを消去する |
rm \* # * という名前のファイルを消去する |
||
</syntaxhighlight> |
|||
</source> |
|||
|} |
|} |
||
62行目: | 62行目: | ||
例えば、コマンドプロンプトで<code><nowiki><wiki></nowiki></code>と表示させようとして次のように実行すると、シンタックスエラーになる。 |
例えば、コマンドプロンプトで<code><nowiki><wiki></nowiki></code>と表示させようとして次のように実行すると、シンタックスエラーになる。 |
||
: < |
: <syntaxhighlight lang="dos"> |
||
echo <wiki> |
echo <wiki> |
||
</syntaxhighlight> |
|||
</source> |
|||
そこで、キャレットでエスケープして次のようにする。 |
そこで、キャレットでエスケープして次のようにする。 |
||
: < |
: <syntaxhighlight lang="dos"> |
||
echo ^<wiki^> |
echo ^<wiki^> |
||
</syntaxhighlight> |
|||
</source> |
|||
==関連項目== |
==関連項目== |
2020年7月5日 (日) 22:51時点における版
コンピューティングや通信において、エスケープ文字(エスケープもじ、escape character)とは、それに続く文字について別の解釈をすることを示す文字である。エスケープ文字は、メタ文字の一種である。通常、何がエスケープ文字であるか、またはそうでないかは、前後関係に依存する。
定義
エスケープ文字は多くのプログラミング言語、データフォーマット、通信プロトコルの文法の一部である。エスケープ文字の目的は、エスケープシーケンスと呼ばれる一連の文字列を開始することである。エスケープ文字に続く文字は、エスケープ文字がない時とは別の解釈をしなければならない。エスケープ文字自体は、単独では意味を持っていない。エスケープシーケンスは、エスケープ文字を含めて2文字以上である。
エスケープシーケンスには2つの機能がある。一つは、アルファベットでは表すことができない構文的な実体、例えば装置へのコマンドや特別なデータをコード化することである。もう一つは、文法上特別な意味を持つ文字を、その文字自体として表現することである。後者の場合、そのエスケープシーケンスは「ダイグラフ」や「トライグラフ」と呼ばれ、エスケープ文字と表示したい文字からなる。
制御文字
一般に、エスケープ文字は装置制御文字の一種でなく、逆もまた然りである。制御文字を非図形文字、すなわち出力装置(例えば、プリンタやテキスト端末)にとって特別な意味を持つものとして定義するならば、その装置にとってはあらゆるエスケープ文字は制御文字である。しかし、プログラミングで使用されるエスケープ文字は図形文字(バックスラッシュ(\)[1]など)なので制御文字ではない。逆に、(全てではないが)ほとんどのアスキー制御文字は、単独で何らかの制御機能を持っているため、エスケープ文字ではない。
多くのプログラミング言語では、エスケープ文字は制御文字を参照するエスケープシーケンスも作る。例えば、改行のエスケープシーケンスは \n
である。
例
ASCIIエスケープ文字
ASCIIエスケープ文字は制御文字の一種で、十進数で27、十六進数で0x1Bに割り当てられている。キャレット記法では ^[
と表され、Unicodeでは制御文字の図形表現として ␛ (U+241B) が定義されている。この文字は多くの出力装置で、「コントロールシーケンス」または「エスケープシーケンス」と呼ばれる文字列の開始文字として使われている。一般的に、それに続く文字が通常の文字ではなくコントロールシーケンスとして解釈されるということを装置に伝えるために、エスケープ文字が最初に送られる。エスケープ文字に続けて詳細な動作を指定する1文字以上の文字が送られた後、装置は通常の文字として解釈するモードに戻る。例えば、^[と表示可能文字からなる文字列 ^[2;10H
は、DEC VT102端末においてカーソルを画面上の2行目10桁目へ移動させる。これは後にANSIX3.64標準が対象とするANSIエスケープコードへと発展した。ヒューレット・パッカードのPrinter Command Language (PCL) も各コマンドがエスケープ文字から始まっていた。
「エスケープ文字」という用語が最初に使われたのは、ボブ・バーマーによるIBMの技術書の中である。エスケープシーケンスの仕組みを発明し、ASCII文字コードセットにエスケープ文字を加えることを提案したのも彼である。
Escキー(エスケープキー)は、PCのキーボード上にはあるが、ASCIIによる文字通信を主な目的としていないPDAなどの装置のキーボードには見られない。DEC VT220シリーズは専用のEscキーを備えておらず、その代わりにキーパッドの上のキーの1つを使った。1970年代から1980年代のユーザインタフェースでは、エスケープ文字のためにこのキーを使うことは珍しくなかったが、最新のデスクトップ・コンピュータにおいて、そのような使用はされなくなった。時々、EscキーはAltModeキーと同一視される。Escキーを使用しなくても、コントロールキーと'['を同時に押下することでもエスケープ文字のコードを発生させることができる。
プログラミングとデータフォーマット
現代の多くのプログラミング言語では、文字列リテラルの開始および終了を表す区切り文字として、ダブルクォート0x22 ("
) を使用している。そのため、ダブルクォートそのものを文字列リテラルに含めることはそのままではできないので、バックスラッシュ0x5c (\
) をエスケープ文字として使用する(日本語環境ではオペレーティングシステムおよびフォントによっては0x5cは円記号として表示されることがあるが、以下では単にバックスラッシュと書く)。文字列リテラルの中で \"
と書くと "
と解釈される。また、十六進数のASCIIコードを使って \x22
と書くこともできる。またシングルクォート0x27 ('
) を文字リテラルの区切り文字として使用することもあり、文字リテラルの中でシングルクォートを使用する場合は同様にエスケープが必要となる。
C言語、C++、Java、Rubyでは、上記の2つの方法とも使用できる。PostScriptやマイクロソフトのRich Text Formatもバックスラッシュによるエスケープを使用する。
quoted-printableでは等号 (=
) をエスケープ文字として使用する。
URLやURIでは、特別な意味を持つ文字や非ASCIIの文字を表すのにパーセント記号 (%
) をエスケープ文字としたパーセントエンコーディングを使用する。アンパサンド (&
) は、SGMLやそれから派生したHTML・XMLなどにおいてエスケープ文字として扱われる。
JavaScript
JavaScriptでは \(バックスラッシュ)をエスケープ文字として使用する[2][3]。
- \' シングルクォート
- \" ダブルクォート
- \\ バックスラッシュ(円記号)
- \n 改行
- \r キャリッジ・リターン
- \t タブ
- \b バックスペース
- \f 改ページ
- \v 垂直タブ(IE9以前では、'\v'は垂直タブ('\x0B')ではなく'v'とみなされる。ブラウザ互換性が重要な場合は、'\v'ではなく'\x0B'を使用する。)
- \0 ヌル文字 (U+0000 NULL)('\0'に続く文字が数字でない場合のみ。数字が続く場合は八進数の数値とみなされる。)
\v と \0 はJSONでは使用できない。
通信プロトコル
Point-to-Point Protocol (PPP) では、0x7Dのオクテット(十進数で125、八進数で\175、ASCIIでは })をエスケープ文字として使用する。すぐ後に続くオクテットは0x20とのXORを取ってから上位のプロトコルへ送られる。これは、0x7D自体と、PPPでフレームの開始・終了を表わす0x7Eついて、上位のプロトコルからそれらのオクテットをPPPでカプセル化して送信するよう要請があったときに適用される。上位のプロトコルからの要請が 0x7D の場合は、送られるシーケンスは 0x7D 0x5D となり、 0x7E ならば 0x7D 0x5E となる。
Bourne Shell
Bourne Shell (sh) では、アスタリスク (*
) と疑問符 (?
) がワイルドカードとして使用される。エスケープ文字を使わないと、*
はカレントディレクトリの全てのファイルのファイル名に展開される。"*"というファイル名を指したい場合は、バックスラッシュ(\
)を前につける。例えば、バックスラッシュをつけない場合とつけた場合で、以下のように動作が変わる。
rm * # カレントディレクトリの全てのファイルを消去する
rm \* # * という名前のファイルを消去する
|
Windowsのコマンドプロンプト
Windowsのコマンドプロンプトでは、特別な意味を持つ文字 (& | ( ) < > ^
) のためのエスケープ文字としてキャレット (^
) を使用する[4]。DOSのコマンドラインインタプリタはWindowsのコマンドプロンプトと似たような文法を持つが、このエスケープ文字には対応していない。
例えば、コマンドプロンプトで<wiki>
と表示させようとして次のように実行すると、シンタックスエラーになる。
echo <wiki>
そこで、キャレットでエスケープして次のようにする。
echo ^<wiki^>
関連項目
エスケープ文字は、以下のものとは異なる。
脚注と出典
- ^ 日本語の表示環境の多くでは、バックスラッシュは円記号(\)として表示される。
- ^ “JavaScript character escape sequences ¡ Mathias Bynens”. Mathiasbynens.be. 2014年6月30日閲覧。
- ^ “Special Characters (JavaScript)”. Msdn.microsoft.com (2014年6月20日). 2014年6月30日閲覧。
- ^ Tim Hill (1998年). “The Windows NT Command Shell”. MacMillan Technical Publishing. 2010年1月13日閲覧。
外部リンク
この記事にはパブリックドメインである、アメリカ合衆国連邦政府が作成した次の文書本文を含む。Federal Standard 1037C. 一般調達局.