Escape double quotes in a string
C#StringDouble QuotesC# Problem Overview
Double quotes can be escaped like this:
string test = @"He said to me, ""Hello World"". How are you?";
But this involves adding character "
to the string. Is there a C# function or other method to escape double quotes so that no changing in string is required?
C# Solutions
Solution 1 - C#
No.
Either use verbatim string literals as you have, or escape the "
using backslash.
string test = "He said to me, \"Hello World\" . How are you?";
The string has not changed in either case - there is a single escaped "
in it. This is just a way to tell C# that the character is part of the string and not a string terminator.
Solution 2 - C#
You can use backslash either way:
string str = "He said to me, \"Hello World\". How are you?";
It prints:
He said to me, "Hello World". How are you?
which is exactly the same that is printed with:
string str = @"He said to me, ""Hello World"". How are you?";
Here is a DEMO
.
"
is still part of your string.
You can check Jon Skeet's Strings in C# and .NET article for more information.
Solution 3 - C#
In C# you can use the backslash to put special characters to your string.
For example, to put "
, you need to write \"
.
There are a lot of characters that you write using the backslash:
Backslash with other characters
\0 nul character
\a Bell (alert)
\b Backspace
\f Formfeed
\n New line
\r Carriage return
\t Horizontal tab
\v Vertical tab
\' Single quotation mark
\" Double quotation mark
\\ Backslash
Any character substitution by numbers:
\xh to \xhhhh, or \uhhhh - Unicode character in hexadecimal notation (\x has variable digits, \u has 4 digits)
\Uhhhhhhhh - Unicode surrogate pair (8 hex digits, 2 characters)
Solution 4 - C#
Another thing worth mentioning from C# 6 is interpolated strings can be used along with @
.
Example:
string helloWorld = @"""Hello World""";
string test = $"He said to me, {helloWorld}. How are you?";
Or
string helloWorld = "Hello World";
string test = $@"He said to me, ""{helloWorld}"". How are you?";
Check running code here!
View the reference to interpolation here!
Solution 5 - C#
You're misunderstanding escaping.
The extra "
characters are part of the string literal; they are interpreted by the compiler as a single "
.
The actual value of your string is still He said to me, "Hello World". How are you?
, as you'll see if you print it at runtime.
Solution 6 - C#
Please explain your problem. You say:
> But this involves adding character " to the string.
What problem is that? You can't type string foo = "Foo"bar"";
, because that'll invoke a compile error. As for the adding part, in string size terms that is not true:
@"""".Length == 1
"\"".Length == 1
Solution 7 - C#
2022 UPDATE: Previously the answer would have been "no". However, C#11 introduces a new feature called "raw string literals." To quote the Microsoft documentation:
> Beginning with C# 11, you can use raw string literals to more easily create strings that are multi-line, or use any characters requiring escape sequences. Raw string literals remove the need to ever use escape sequences. You can write the string, including whitespace formatting, how you want it to appear in output."
SOURCE: https://docs.microsoft.com/en-us/dotnet/csharp/programming-guide/strings/#raw-string-literals
EXAMPLE: So using the original example, you could do this (note that raw string literals always begin with three or more quotation marks):
string testSingleLine = """He said to me, "Hello World". How are you?""";
string testMultiLine = """
He said to me, "Hello World". How are you?
""";
Solution 8 - C#
In C#, there are at least four ways to embed a quote within a string:
- Escape quote with a backslash
- Precede string with
@
and use double quotes - Use the corresponding ASCII character
- Use the hexadecimal Unicode character
Please refer this document for detailed explanation.