【问题标题】:c# stringbuilder tostring double quote issuec# stringbuilder tostring双引号问题
【发布时间】:2022-02-13 01:24:52
【问题描述】:

将字符串从字符串生成器转换为字符串时遇到问题。 问题与this issue 类似,但略有不同:

这是我的代码简化:

StringBuilder sb = new StringBuilder();
sb.Append("\"");
sb.Append("Hello World");
sb.Append("\"");

string test = sb.ToString();

现在在调试器中 sb 值为:

"Hello World"

在调试器中测试字符串值改为:

\"Hello World\"

当将测试字符串值返回给浏览器时,velue 仍然被转义:

\"Hello World\"

我尝试过使用字符串替换:

test = test.Replace("\"", "");

不走运,我尝试附加 ASCII 字符而不是 \" 并且我还尝试了不同的附加

sb.Append('"');

所有这些都没有运气。有人可以指出我为什么仍然获得转义字符以及如何摆脱它的正确方向。

感谢并感谢您的任何意见。

【问题讨论】:

  • 嗨,使用@"""" 没有区别。当我使用 sb.Append(@"""");生成的 stings 仍然包含 \" 。
  • 我还通过在 IE 中打开 URL 并保存到磁盘来测试输出。在记事本中打开结果后,转义斜杠仍然存在,因此 100% 不是调试器或监视问题。

标签: tostring stringbuilder ansi-escape


【解决方案1】:

好吧,似乎在 WCF 中 stringBuilder 会自动添加转义引号。这意味着您无法摆脱这一点。我也做错了。我试图返回一个我应该返回序列化 JSON 对象的字符串。

【讨论】:

    【解决方案2】:

    我没有看到您描述的行为。用反斜杠转义双引号应该可以。下面是sn-p的代码

            var sb = new StringBuilder();
            sb.Append("Ed says, ");
            sb.Append("\"");
            sb.Append("Hello");
            sb.Append("\"");
            Console.WriteLine(sb.ToString());
            foreach (char c in sb.ToString()) Console.Write(c + "-");
            Console.ReadKey();
    

    生产

    Ed says, "Hello"
    E-d- -s-a-y-s-,- -"-H-e-l-l-o-"-
    

    如果您在最终显示的字符串中得到实际的反斜杠字符,则可能是在 StringBuilder 和 ToString 代码之后添加的。

    【讨论】:

    • 好的,我不能执行 ConsoleWrite,因为它是 Web 服务,但我已经对本地文件执行了 StreamWriter。输出很好,没有转义字符。这就引出了一个问题,为什么浏览器窗口中显示的数据包含转义字符。
    • @Pete 我得看看你是如何将字符串输出到 HTML 中的。但一般来说,双引号必须编码为"。可能问题是您没有使用 Html.Encode() 之类的东西对字符串进行编码。在这种情况下,您应该使用 " 而不是双引号字符来构建您的字符串。
    • 试过了但这直接转换为该字符串。 html.encode 仍然产生转义字符
    • 好吧,似乎在 WCF 中 stringBuilder 会自动添加转义引号。这意味着您无法摆脱这一点。我也做错了。我试图返回一个我应该返回序列化 JSON 对象的字符串。
    【解决方案3】:

    您可以在字符串之前使用逐字字符串文字“@”,然后输入两次引号。这消除了在字符串序列中使用转义符的使用:)

    StringBuilder sb = new StringBuilder();
    sb.Append(@"""");
    sb.Append("Hello World");
    sb.Append(@"""");
    
    string test = sb.ToString();
    

    【讨论】:

      【解决方案4】:

      在寻找解决方案时,这个问答线程不断出现。 对我来说,困惑在于转义 的调试器看起来与稍后我将字符串返回给客户端时应用的 JSON 序列化程序行为完全相同。所以线程顶部的代码(和我的代码)正常工作。

      一旦我意识到这一点,我将我正在处理的代码转换为返回一个数组(在本例中为 string[])并存储它而不是原始的字符串对象。后来 JSONResult 序列化器处理了正确的数组转换。

      【讨论】:

        猜你喜欢
        • 2012-01-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-01-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多