C#で文字列を扱っていると、必ずと言っていいほど直面するのが「ダブルクォーテーション(")を文字として表示したいのに、文字列の終わりと認識されてエラーになる」という問題です。
例えば、HTMLのタグやJSONデータ、あるいはセリフの中に " を含めたい場合、そのまま記述することはできません。
この記事では、基本となるバックスラッシュを使ったエスケープから、パスの記述に便利な @ を使った方法、そして最新のC#(C# 11以降)で導入された最も強力な「生文字列リテラル(ダブルクォーテーション3つ)」まで、現在の開発現場で役立つ知識をサンプルコード付きで徹底解説します。
![]() 執筆者:マヒロ |
|
- OS:Windows 11 / macOS Sequoia
- IDE:Visual Studio / VS Code / IntelliJ IDEA
- その他:Chrome DevTools / 各言語最新安定版
※本メディアでは、上記環境にてコードの動作と情報の正確性を検証済みです。
方法1:バックスラッシュでエスケープする(基本)
最も基本的で、古くからある方法がエスケープシーケンスを使うやり方です。
ダブルクォーテーションの直前にバックスラッシュ \(環境によっては円記号 ¥)を置くことで、「これは文字列の終わりではなく、ただの文字です」とコンパイラに伝えます。
基本的な書き方
using System;
class Program
{
static void Main()
{
// "Hello" と表示したい場合
// 直前に \ を付ける
string message = "He said, \"Hello, C# World!\"";
Console.WriteLine(message);
}
}
実行結果
He said, "Hello, C# World!"
\" と記述することで、画面上には " が1つ表示されます。
短い文字列や、単発でダブルクォーテーションを使いたい場合にはこの方法が最も手軽です。
しかし、JSONデータのように " が大量に出てくる場合、\" だらけになってしまいコードが非常に読みづらくなる(可読性が下がる)というデメリットがあります。
方法2:逐語的文字列リテラル「@」を使う(エスケープしない)
ファイルパスや正規表現など、バックスラッシュを多用する文字列を扱う際に便利なのが、文字列の先頭に @ を付ける逐語的(ちくごてき)文字列リテラルです。
この記法では、バックスラッシュがエスケープ文字として機能しなくなるため、パスなどをそのまま書くことができます。
ただし、ダブルクォーテーションを表示したい場合には、少し特殊なルールがあります。
ダブルクォーテーションを2つ重ねる
@ を付けた文字列の中で " を表現するには、"" のように2つ重ねて記述します。
using System;
class Program
{
static void Main()
{
// @を付けると、" を表現するには "" と書く
string json = @"{ ""id"": 1, ""name"": ""Apple"" }";
Console.WriteLine(json);
// ファイルパスでの利用例(\をエスケープしなくて良いので楽)
string path = @"C:\Users\MyName\Documents\Data";
Console.WriteLine(path);
}
}
実行結果
{ "id": 1, "name": "Apple" }
C:\Users\MyName\Documents\Data
@"{ ""id"": 1 }" のように書くことで、出力結果は { "id": 1 } となります。
\ をエスケープしなくて済むメリットは大きいですが、" が多いテキストでは結局 "" を連打することになるため、やはり記述が面倒な場面があります。
方法3:生文字列リテラル「”””」を使う(推奨・最新)
C# 11(.NET 7以降)で導入された生文字列リテラル(Raw String Literals)は、これまでの悩みをすべて解決する強力な機能です。
ダブルクォーテーションを3つ(以上)連続させた """ で文字列を囲むことで、その中身を「見たまま」文字列として扱えます。
エスケープなしでそのまま書ける
using System;
class Program
{
static void Main()
{
// ダブルクォーテーション3つで囲む
string html = """
<div class="container">
<p>Hello, "World"!</p>
</div>
""";
Console.WriteLine(html);
}
}
実行結果
<div class="container">
<p>Hello, "World"!</p>
</div>
""" で囲まれた範囲内では、" を1つだけ書いても、文字列の終わりとは認識されず、そのまま文字としての " になります。
\ もそのまま表示されます。
さらに、開始と終了の """ の位置に基づいてインデント(空白)を自動的に除去してくれる機能もあるため、コードの見た目をきれいに保ちながら、HTMLやJSON、SQLなどを貼り付けることができます。
現在の環境であれば、複雑な文字列にはこの方法を使うのがベストプラクティスです。
3つ以上のダブルクォーテーションを含みたい場合
もし文字列の中に """(3連続のダブルクォーテーション)自体を含めたい場合は、囲む記号を4つ """" に増やせばOKです。
囲む数より少ない連続クォートはすべて文字として扱われます。
文字列内のダブルクォーテーションを削除・置換する方法
「エスケープして表示したい」のではなく、「データに含まれているダブルクォーテーションを取り除きたい」というケースもあるでしょう。
CSVデータの読み込みなどでよく発生する要件です。
Replaceメソッドで空文字に置換する
using System;
class Program
{
static void Main()
{
string input = "\"Apple\", \"Banana\", \"Cherry\"";
// " を空文字に置換して削除する
// 引数で " を指定するために \" と書く必要がある
string result = input.Replace("\"", "");
Console.WriteLine($"元データ: {input}");
Console.WriteLine($"削除後 : {result}");
}
}
実行結果
元データ: "Apple", "Banana", "Cherry"
削除後 : Apple, Banana, Cherry
Replace("\"", "") と記述します。
ここでもメソッドの引数として " を渡すために、\" というエスケープ記法が必要になる点に注意してください。
これにより、文字列中のすべてのダブルクォーテーションが一括で削除されます。
先頭と末尾だけ削除したい場合(Trim)
文字列の中身ではなく、囲っている外側のクォートだけを外したい場合は Trim を使います。
string text = "\"Hello\"";
// 端にある " だけを削除
string trimmed = text.Trim('"');
// 結果: Hello
引数に char 型の '"'(シングルクォーテーションで囲む)を渡すことで、両端の記号を除去できます。
補足:シングルクォーテーションのエスケープは?
C#において、文字列(string)の中でシングルクォーテーション ' を使う場合は、エスケープ不要です。
そのまま記述できます。
string s = "I'm a programmer."; // OK
ただし、文字型(char)として定義する場合(' 'で囲む場合)は、エスケープが必要です。
char c = '\''; // エスケープが必要
C#のスキルを活かして年収を上げる方法
以上、C#でのダブルクォーテーションのエスケープ方法について解説してきました。
業務システム開発やアプリ開発、ゲーム開発において需要の高いC#を扱えるエンジニアは、転職によって数十万円の年収アップはザラで、100万円以上年収が上がることも珍しくありません。
なお、転職によって年収を上げたい場合は、エンジニア専門の転職エージェントサービスを利用するのが最適です。
転職エージェントも副業エージェントも、登録・利用は完全無料なので、どんな求人や副業案件があるのか気になる方は、気軽に利用してみるとよいでしょう。
| 年収アップにこだわりたい方 (平均アップ額138万円の実績) | テックゴー |
| 未経験・経験者問わず幅広く探したい方 | ユニゾンキャリア |
| 業界に精通した担当者に相談したい方 | キッカケエージェント |
| ゲーム業界への転職を志望する方 | ファミキャリ |
| エンジニア未経験からキャリアを築く方 | イーチキャリア |



