1. 基本の特殊文字とエスケープ
プログラミングでの文字列は、ただの文字だけじゃなくて、クォートや改行、タブみたいな特殊文字も入ってるよ。たとえば \n や \t みたいなやつね。でも、もし文字列の中に こんにちは, "user"! って書きたくなったら、コンパイラが「え、文字列の中のクォートってエラーじゃないの?」って聞いてくる。そこでエスケープの出番!
C#でのエスケープは、文字列の中の特定の文字に「特別な意味」を持たせる方法だよ。そのためにバックスラッシュ \(backslash)を使うんだ。
クラシックな特殊文字
| シーケンス | 説明 | デモ |
|---|---|---|
| \n | 改行 | Enter押した |
| \t | タブ | タブ |
| \\ | 文字通りの「バックスラッシュ」 | \ |
| \" | 文字列内のクォート | " |
| \' | シングルクォート(文字列ではあまり使わない) | ' |
| \r | キャリッジリターン(古い改行スタイル、ほぼ使わない) | |
| \0 | Null文字 | (見えない) |
| \b | Backspace(直前の文字を消す―コンソールでは効かないことも) |
どう動くの?
エスケープ文字を使ったサンプルを書いて、実際にどうなるか見てみよう。
Console.WriteLine("こんにちは, \"ユーザー\"!");
// 出力: こんにちは, "ユーザー"!
Console.WriteLine("C:\\Program Files\\MyApp");
// 出力: C:\Program Files\MyApp
Console.WriteLine("行1\n行2");
// 出力:
// 行1
// 行2
Console.WriteLine("僕\tタブが\t好きだよ!");
// 出力:
// 僕 タブが 好きだよ!
こんな感じで、たった一本のバックスラッシュ(\)で、ほぼどんな特殊文字でも文字列に「ねじ込める」し、コンパイラやチームメイトもパニックにならないよ。
2. 普通の文字列とverbatim文字列(@-文字列)
もしファイルパスみたいにバックスラッシュを何回も書く必要があったら?毎回 \\ って書くのは正直しんどい。ありがたいことに、C#には @ で始まるverbatim文字列リテラルがあるんだ。
どんな感じ?
string path = "C:\\Users\\Ann\\Documents\\";
string verbatimPath = @"C:\Users\Ann\Documents\";
verbatim文字列ではエスケープ不要―バックスラッシュは普通の文字として扱われるよ。でも注意点がひとつ:この中でクォートを書くときは2回連続で書く必要がある!
string quote = @"これはクォート入りのverbatim文字列: ""Hello""!";
Console.WriteLine(quote);
// 出力: これはクォート入りのverbatim文字列: "Hello"!
見た目の比較
| スタイル | シンタックス | 動作 |
|---|---|---|
| 普通 | "C:\\Folder\\File.txt" | バックスラッシュは全部2回 |
| verbatim(@) | @"C:\Folder\File.txt" | バックスラッシュはそのまま |
| verbatim+クォート | @"Text と ""クォート""入り" | クォートは2回連続 |
プロの小技:ファイルパス、複数行テキスト、正規表現テンプレートにはverbatim文字列を使おう。
3. 改行と複数行文字列
複数行のメッセージやASCIIアートを書きたいこと、よくあるよね。一番シンプルなのは普通の文字列で \n を使うか、verbatimリテラルを使うこと。verbatimリテラルは改行も含めて全部そのまま保存してくれる。例:
Console.WriteLine("1行目\n2行目");
Console.WriteLine(@"複数行文字列だよ。
エスケープ改行は不要
タブも そのまま動く。");
最近のC#には raw string literals(トリプルクォート)も登場して、クォートを重ねなくても複数行テキストが書けるようになった。例:
string json = """
{
"name": "Alice",
"age": 30,
"skills": ["C#", "SQL", "Azure"]
}
""";
Console.WriteLine(json);
4. Unicode ― C#で世界中の文字を保存する方法
今の時代、ラテン文字だけじゃなくて、キリル文字や漢字、数式記号、絵文字まで扱うよね。それができるのは Unicode という文字コードシステムのおかげ!
Unicodeって何?
Unicode は、どんな言語やプラットフォームでも、すべての文字にユニークな番号(code point)を割り当てる国際標準だよ。だからC#でキリル文字も英語も中国語もレアな特殊文字も同時に使えるんだ。
いろんな言語の文字列例:
Console.WriteLine("Hello, 世界! 你好! مرحبا!");
Unicode文字を文字列で使う
自分のエンコーディングが対応していれば、好きな文字を直接書いてもいいし、エスケープシーケンス \uXXXX(XXXXは4桁の16進数)を使ってもOK。
Console.WriteLine("シンボル: \u263A"); // ☺が出る
65535より大きいコード(多くの絵文字など)は \UXXXXXXXX(8桁)を使うよ:
Console.WriteLine("スマイリー: \U0001F60A"); // 😊が出る
これで何ができる?
- どんなテキストでも保存・処理できる!
- 言語を混ぜたり、変な記号を使っても大丈夫―C#と.NETはUnicodeを「最初から」サポートしてる。
- 国際ユーザーや珍しいアルファベットを扱うときは特に重要!
5. 絵文字と特殊文字を文字列で使う
今どきの文字列は、文字だけじゃなくて 絵文字 もアリ!たとえば、ユーザーに楽しいメッセージを送りたいときに「ニコニコ」を入れたいよね。
どうやって絵文字を入れる?
絵文字を直接文字列に貼り付ける:
好きな絵文字(例:😊, 🚀, 🐱)をコピペして文字列リテラルに入れるだけ!
Console.WriteLine("こんにちは! 😊");
Unicodeコードを使う:
ほとんどの絵文字は \U と8桁のコードでOK。
Console.WriteLine("ほら、ネコだよ: \U0001F431"); // 🐱
絵文字のコードはオンラインのUnicode表で探せるよ。
絵文字を扱うときの注意
絵文字は文字列の中で 2文字以上 になることがある(Unicodeコードが16ビットより大きいから)。
長さを調べるときなど、ちょっとした「びっくり」があるかも:
string s = "😊";
Console.WriteLine(s.Length); // 2って出ることもある!
これは、その絵文字のcodepointが2文字でエンコードされてるからだよ。
コンソールやWebページに出すときは、システムやフォントが対応していれば大体ちゃんと表示されるよ。
絵文字入り文字列の出力例
Console.WriteLine("成功おめでとう! 🎉 君はすごい! 🚀");
6. 落とし穴とよくあるミス
初心者がよくやるのは、クォートやバックスラッシュのエスケープ忘れ。エスケープしないと、コンパイラが「文字列終わった?」って勘違いしちゃう。
ミス例:
Console.WriteLine("彼が言った: "こんにちは!""); // エラー!コンパイラがパニック。
正解:
Console.WriteLine("彼が言った: \"こんにちは!\"");
ファイルパスを出したいときも、たまにこうやっちゃう:
Console.WriteLine("C:\Temp\file.txt"); // エラーか、変な結果:C: emp ile.txt
なぜなら \t や \f は特殊文字(タブとフォームフィード)だから。 直すには主に2つの方法がある:
Console.WriteLine("C:\\Temp\\file.txt"); // バックスラッシュ2回
Console.WriteLine(@"C:\Temp\file.txt"); // verbatim文字列
注意:verbatim文字列でクォートが必要なときは、2回連続で書こう:
Console.WriteLine(@"ファイル ""config.txt"" が見つかりません。"); // ファイル "config.txt" が見つかりません。
GO TO FULL VERSION