C#では文字列や文字リテラル内に特殊な文字(改行やタブ、引用符など)を直接書くことができません。その代わりに「エスケープ文字」を用いて、文字列内に必要な制御文字や記号を表現します。今回は、この「エスケープ文字」について解説していきます。
エスケープ文字とは?
エスケープ文字はバックスラッシュ(日本語環境では”\
“[円マーク]になることが多い)から始まる一連の文字列で、通常の文字では表現できない制御文字や記号を示します。たとえば、改行は \n
、タブは \t
、ダブルクォートは \"
のように書きます。
これにより、プログラム内で意図した文字を安全に扱えるようになります。
主なエスケープ文字一覧
以下はC#でよく使われるエスケープシーケンスの例です。
シーケンス | 意味 | 説明 |
---|---|---|
\n | 改行 | 行末で改行コードを挿入する |
\r | 復帰 | キャリッジリターン(主にWindows環境で改行と併用) |
\t | 水平タブ | 水平タブ文字を挿入する |
\\ | バックスラッシュ | \ そのものを文字として扱う |
\" | ダブルクォート | 文字列リテラル内で " を表現 |
\' | シングルクォート | 文字リテラル内で ' を表現 |
\0 | ヌル文字 | ASCIIコード0(文字列終端ではない) |
\uXXXX | Unicode文字 | 文字コード(16進4桁)で指定したUnicode文字 |
\xXX | Unicode文字 | 文字コード(16進2桁)で指定したUnicode文字 |
文字列リテラルでの利用例
通常の文字列リテラルではエスケープ文字を展開して文字列を生成します。
string path = "C:\\Users\\Public\\Documents\\report.txt";
// C:\Users\Public\Documents\report.txt
string quote = "She said, \"Hello, World!\"";
// She said, "Hello, World!"
string multiLine = "1行目\n2行目\n3行目";
/*
1行目
2行目
3行目
*/
C:\\Users\\…
のように\\
でバックスラッシュを表現(1行目)- ダブルクォートを文字列中に含めるには
\"
を使用(4行目) \n
で複数行にまたがる文字列を生成(7行目)
@文字列リテラル(逐語的識別子)
@"..."
の形式を使うと、エスケープ文字を無効化して書式をそのまま保持できます。
string path = @"C:\Users\Public\Documents\report.txt";
// C:\Users\Public\Documents\report.txt
string sql = @"SELECT * FROM Users
WHERE Name = 'Yamada'
ORDER BY CreatedAt";
/*
SELECT * FROM Users
WHERE Name = 'Yamada'
ORDER BY CreatedAt
*/
string quote = @"She said, ""Hello, World!""";
// She said, "Hello, World!"
- バックスラッシュやダブルクォートをエスケープ不要で記述(1行目、4行目)
- ダブルクォートを含める場合は
""
と二重に書く(13行目)
文字リテラルでの利用例
文字リテラル(char
)にもエスケープ文字が使えます。
char newline = '\n';
char quote = '\'';
char backslash = '\\';
- シングルクォート内(char)では
\'
で'
を表現(2行目) char
型を利用する場面では文字列リテラルと同様のエスケープルール
Unicodeエスケープシーケンス
\uXXXX
や \xXX
形式で任意のUnicode文字を直接指定できます。
string heart = "\u2665"; // ♥
string smile = "\x263A"; // ☺
- 4桁(または2桁)16進数でUnicodeコードポイントを書き分け
- 通常表示できない文字の扱いに便利
C# 11 以降の生文字列リテラル
C# 11から導入された生文字列リテラル(raw文字列リテラル)は、"""
で囲むことで複雑なエスケープを不要にします。
string json = """
{
"name": "Sato",
"age": 30,
"path": "C:\User\Sato\docs"
}
""";
- 文字列内の
\
や"
をそのまま扱える - インデントを保ったまま記述可能で可読性が向上
注意点とベストプラクティス
- Windowsファイルパスを扱うときは
@"…"
や生文字列リテラルを活用 - 文字列補間(
$"…"
)と組み合わせる際は$@"…"
や$"""…"""
に注意 - JSONやXMLなど外部フォーマットを埋め込むときはエスケープ漏れによる構文エラーに注意
まとめ
C#のエスケープ文字は、文字列や文字リテラル内で特殊文字を適切に扱うための基本的かつ重要な機能です。
- 通常リテラル:
\n
,\t
,\\
,\"
など @"…"
逐語的識別子:エスケープ無効化- C#11 生文字列:
"""…"""
で多行文字列や複雑文字列を直書き
これらをうまく活用することで、コードはエラーに強く、意図が明快で、将来の変更にも柔軟に対応可能になります。また、他の開発者との協働やレビューの際にも、「なぜこの表記なのか」が説明できると信頼性も高まりますのでしっかりと身に付けておきましょう!