我可以在逐字字符串文字中转义双引号吗?

Posted

技术标签:

【中文标题】我可以在逐字字符串文字中转义双引号吗?【英文标题】:Can I escape a double quote in a verbatim string literal? 【发布时间】:2010-12-28 02:04:04 【问题描述】:

在 C# 中的逐字字符串文字 (@"foo") 中,反斜杠不被视为转义,因此使用 \" 来获取双引号是行不通的。有没有办法在 a 中获取双引号逐字字符串文字?

这可以理解是行不通的:

string foo = @"this \"word\" is escaped";

【问题讨论】:

最全面的答案是 rfonn's answer(例如,对于从搜索引擎到这里的人,例如搜索“escape quotes C#”) 【参考方案1】:

正如the documentation 所说:

简单的转义序列......按字面意思解释。只有引号转义序列 ("") 不会被逐字解释;它产生一个双引号。此外,在逐字插入字符串大括号转义序列()的情况下,不会按字面解释;它们产生单大括号字符。

【讨论】:

【参考方案2】:

在 GitHub 中针对 C# 语言提出了一项关于更好地支持原始字符串文字的提案。一个有效的答案是鼓励 C# 团队向该语言添加新功能(例如三引号 - 像 Python)。

见https://github.com/dotnet/csharplang/discussions/89#discussioncomment-257343

【讨论】:

【参考方案3】:

这应该有助于解决您可能遇到的任何问题:C# literals

这是来自链接内容的表格:

Regular literal Verbatim literal Resulting string
"Hello" @"Hello" Hello
"Backslash: \\" @"Backslash: \" Backslash: \
"Quote: \"" @"Quote: """ Quote: "
"CRLF:\r\nPost CRLF" @"CRLF:<br>Post CRLF" CRLF:<br>Post CRLF

【讨论】:

的转义怎么办?【参考方案4】:

使用重复的双引号。

@"this ""word"" is escaped";

输出:

this "word" is escaped

【讨论】:

我正在尝试使用 @html.Raw() 并且四引号破坏了我的字符串 你可以在没有字符串文字的情况下使用它吗?似乎 Html.Raw() 会确保它是你的字符串...... 也可以与字符串插值结合使用:$@"this ""wordVar"" is escaped";. 也许要明确说明这是否是唯一的方法?那么后来的发展呢,比如 C# 6? (但没有“编辑:”、“更新:”或类似的 - 答案应该看起来好像是今天写的。)【参考方案5】:

为了添加更多信息,您的示例将在没有 @ 符号的情况下工作(它可以防止使用 \ 转义),这样:

string foo = "this \"word\" is escaped!";

它可以双向工作,但我更喜欢双引号样式,因为它更容易工作,例如,文件名(字符串中有很多 \)。

【讨论】:

【参考方案6】:

使用双引号。

string foo = @"this ""word"" is escaped";

【讨论】:

以上是关于我可以在逐字字符串文字中转义双引号吗?的主要内容,如果未能解决你的问题,请参考以下文章

如何在包含变量的逐字字符串中转义双引号

如何在nmake中转义双引号

如何在 Bash 中转义双引号? [复制]

如何在标题属性中转义双引号

在 appsettings.json 中的连接字符串中转义双引号

如何在 PHP 的 mysqli_query() 中转义双引号字符?