【问题标题】:How can I not escape a character sequence in a string in C#?如何在 C# 中不转义字符串中的字符序列?
【发布时间】:2017-06-07 23:07:27
【问题描述】:

我正在从 C# 中的资源文件 (.resx) 中读取一个值,并且在该值中,我添加了 \r\n\r\n 以便它以正确的格式显示。例如blah\r\n\r\nblah 出于某种原因,字符串会自动添加一个“\”,因此文本实际上变成了blah\\r\\n\\r\\nblah,因此它转义了字符序列。

【问题讨论】:

  • 正如它目前所写的那样,很难准确地说出你在问什么。请参阅How to Ask 页面以帮助澄清此问题
  • 我已经更新了这个问题。我希望这会有所帮助
  • 你能把这部分代码和你的问题一起添加吗?
  • 你在哪里看到“blah\\r\\n\\r\\nblah”?在 Visual Studio 调试器中?您是否在字符串的开头和结尾看到引号 "?这意味着您正在查看包含 blah\r\n\r\nblah 并且不包含引号或反斜杠的 C# 文字。 C# 文字转义元字符,以便您可以看到它们,否则它们将是不可见的。
  • 我在调试器中看到blah\\r\\n\\r\\nblah,输出显示blah\r\n\r\nblah

标签: c# resource-files


【解决方案1】:

尝试使用 Shift+Enter 在 .resx 文件中添加新行,而不是 \r\n。或者换成str = str.Replace("\\r\\n", "\r\n");

【讨论】:

    【解决方案2】:

    当您存储字符串时,转义字符被存储为字符串文字的一部分,并且不再“转义”任何内容。您可以做的一件事是在阅读后将占位符字符串“\r\n”替换为换行符。

    例如:

    private static void Main()
    {
        var resourceStr = "blah\\r\\n\\r\\nblah";
    
        Console.WriteLine("Original resource string:");
        Console.WriteLine(resourceStr);
    
        Console.WriteLine("\nAfter calling replace:");
        Console.WriteLine(resourceStr.Replace("\\r\\n", Environment.NewLine));
    
        Console.WriteLine("\nDone!\nPress any key to exit...");
        Console.ReadKey();
    }
    

    输出

    【讨论】:

      猜你喜欢
      • 2021-05-12
      • 2011-04-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-10-27
      • 2021-12-20
      • 2012-02-02
      • 2019-11-19
      相关资源
      最近更新 更多