【问题标题】:How to prevent C# from escaping my string?如何防止 C# 转义我的字符串?
【发布时间】:2012-06-19 12:52:43
【问题描述】:

我有 Windows 窗体 UI,它允许我在 TextBox 中输入字符串格式,例如:

输入结果格式:{sku}:{value} \n

问题是,\n 被转义了,所以调试视图中的结果格式字符串如下所示:

{sku}:{value} \\n

这会产生 \n 而不是结果中的换行符。

所以问题是,如何防止这种情况,或者如何在StringBuilder.AppendFormat() 中使用之前删除转义

更新:我决定从 notepad++ 窗口添加图像,这可能有助于理解我需要什么以及为什么(虽然我的用例有点不同,但我认为想法是一样的):

【问题讨论】:

  • 这只是一个调试器显示工件,它不是执行此操作的语言。 \n 仅在代码中的文字中有效,由编译器解析。您不能将其输入到“属性”窗口中。或 TextBox,您需要设置 Multiline = true 并按 Enter 键。
  • 调试视图显示的是转义的字符串,但我想您会发现该字符串实际上并不包含转义。将字符串输出到 MessageBox 并查看转义是否真的存在。
  • 您是否尝试过 "{sku}:{value}" + '\n'.ToString(),遇到了类似的问题,但可以使用 "char" 代替。跨度>
  • @HansPassant, Jim:如果是调试器显示工件,为什么在使用 StringBuilder.AppendFormat(textbox.Text, args) 后我看到的是 \n 而不是新行?
  • 调试器以您在源代码中编写的方式向您显示字符串。单击放大镜图标以调出文本可视化工具。它会向您展示它在屏幕上的外观。

标签: c# escaping


【解决方案1】:

可能你想要做的是使用 string.Replace(@"\n", "\n") 方法。查看更多http://msdn.microsoft.com/en-us/library/system.string.replace.aspx

【讨论】:

  • +1 是的 - 因为当您从输入(例如从文本框)创建字符串时,例如 "\n",这就是正在创建的确切字符串,这对运行时的字符串没有任何特殊意义。而 C# 代码文件中的转义 \n 是编译器发出换行符的指令(十进制字符代码 13)。
  • 如果有通用方法来处理 \t 等会很好,但如果没有,将接受作为答案。
  • @Giedrus 你真的不能(除非你做了一些讨厌的事情,比如调用 C# 编译器从输入中编译一个字符串文字然后把它拿回来),因为你正在有效地创建你自己的语言和因此必须对其进行解析和翻译。我们知道和喜爱的转义序列是与 C# 相关的,而不是与 .Net 相关的。
  • 嗯,没有那么多,见this link,所以在一个方法中检查所有这些是一件容易的事
  • 我完全同意;是的,一个简单的解决方案是可以实现的——我只是在回应@Giedrius 在我看来似乎是一种信念,即转义序列以某种方式嵌入在框架中,但它们不是。一个简单的符号和替换图在这里可以完美地工作。
【解决方案2】:

对字符串进行反转义的一般方法是使用正则表达式

System.Text.RegularExpressions.Regex.Unescape(yourStringVariable);

How can I Unescape and Reescape strings in .net?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-03-18
    • 2015-09-14
    • 2011-09-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-21
    • 1970-01-01
    相关资源
    最近更新 更多