エスケープシーケンス
Escape sequence
直接表現できない文字列を表現できる文字列で置き換えたもの。
例えば、文字列の括りにダブルクォーテーションを使うようにした場合、文字列の中にダブルクォーテーションを入れるためには、何らかの「逃げる」方法が必要となる。これがエスケープシーケンスになる。
元の文字列からエスケープシーケンスを作り出すことをエスケープ(Escape)、エスケープシーケンスから元の文字列に戻すことをアンエスケープ(Unescape)と呼ぶ。
大きく符号化形式が変わるような場合にはエンコード(Encode)、デコード(Decode)と呼ぶ場合もある。
エスケープシーケンスは一般にエスケープシーケンスであることを示す接頭語(通常は1字)を使う。
このためにその接頭語自身もエスケープする必要がある。大体の場合それを二回繰り返す。
正しくエスケープするためには、エスケープしてはいけない文字をエスケープしてはならないし、エスケープすべき文字をエスケープしなければならない。(当たり前)
正しくアンエスケープするためには、アンエスケープしてはいけない文字をアンエスケープしてはならないし、アンエスケープすべき文字をアンエスケープしなければならない。(当たり前)
エスケープ元の文字が不正であれば、何らかの対処が必要になる。
例外を出す。
代替文字(あるいは代替文字列)に変える。
多くの場合はこれが適切。
そのまま残す。
削除する。
間違ったエスケープ、アンエスケープだと、以下の問題がある。
エスケープで切り分け用に残さなければならない文字が残されず、あるいはアンエスケープで切り分け用の文字が混ざり込む。これにより切り分けが狂うことになる。
二重にエスケープ、アンエスケープされることがある。(ほとんどの場合間違い)
C言語での文字列のダブルクォーテーションのエスケープの例
code:escape_quote.c
printf("He said \"Hello, world!\"\n"); // \"はダブルクォーテーションのエスケープ。\nは改行
エスケープはそのコンテキストに依存する。
コンテキストに沿ったエスケープをしなければならない。
このため複合的に別のエスケープが行われるケースがある。
各種言語の文字列リテラル
各種ツール/データ書式での値の表現
CSV
ダブルクォーテーションによる括り
ダブルクォーテーション内のダブルクォーテーションの二重化によるエスケープ
URL
HTML/HTTP/MIME
application/x-www-form-urlencoded
関連