【问题标题】:How to force Console.WriteLine() to print verbatim strings? [duplicate]如何强制 Console.WriteLine() 逐字打印字符串? [复制]
【发布时间】:2012-03-14 04:20:45
【问题描述】:

可能重复:
Can I convert a C# string value to an escaped string literal

如何打印字符串(通过 Console.WriteLine()),以便逐字打印字符串中可能存在的任何/所有转义序列?

例子:

string s = "This \r\n has \t special \\ characters.";
Console.WriteLine(s);

/* Output (I don't want this)

This 
 has    special \ characters.

*/

我希望输出读取:

This \r\n has \t special \\ characters.

请注意,在我的应用程序中,我从第三方接收字符串(其中包含转义序列) - 即,如果我自己创建字符串,我知道我可以这样做

string s = @"This \r\n has \t special \\ characters.";

【问题讨论】:

  • 所以我们知道你想为字符xD、xA、x9 和x5C 输出什么,但是你想为所有其他字符输出什么?如果您想要 C# 编译器的解释,请查看上面的 ?dupe 链接;如果没有,我认为我们需要更详细的规范。
  • @VBRonPaulFan - 感谢您提醒注意这是重复的。你给的链接就是我要找的。​​span>

标签: c# escaping string-formatting console.writeline verbatim


【解决方案1】:

做到这一点的唯一方法是自己解码转义序列并将它们作为文字条目放回字符串中。这将需要某种转换功能。例如

string EscapeIt(string value) {
  var builder = new StringBuilder();
  foreach (var cur in value) {
    switch (cur) {
      case '\t': 
        builder.Append(@"\t");
        break;
      case '\r': 
        builder.Append(@"\r");
        break;
      case '\n':
        builder.Append(@"\n");
        break;
      // etc ...
      default:
        builder.Append(cur);
        break;
    }
  }
  return builder.ToString();
}

【讨论】:

  • 也可以使用Regex,但基本原理是一样的。您还需要将 \ 转义为 \\。
  • @Servy a Regex 是一个相当繁重的解决方案,可以通过快速开关/外壳来完成。注意我不需要在我的解决方案中逃避 \ 因为我使用逐字字符串
  • 原来的帖子上已经有评论表明这是一个重复的问题和一个不需要你为每个字符写出案例陈述的答案。
  • @KyleW 这不是投反对票的理由。我的答案是在评论之前添加的。如果您觉得这个问题有误,请投反对票。除非答案不正确,否则不应拒绝投票。
  • 如果输入字符串不是非常大,那么“重量”并不是什么大问题,所以它只是归结为最快/最简单的。我想这更多是出于调试目的,而不是在生产代码中。至于转义\,我的意思是你需要添加一个case '\\' append,@"\" 子句,而不是你没有正确地转义你在代码中列出的所有内容。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-05-09
  • 2011-10-17
  • 1970-01-01
  • 2019-06-29
  • 1970-01-01
相关资源
最近更新 更多