如何在 .net 中取消转义和重新转义字符串?

问题描述 投票:0回答:3

我需要在 WPF 控件上有一个 TextBox,它可以接收像

Commit\r\n\r
这样的文本(这是 .net 字符串
"Commit\\r\\n\\r"
)并将其转换回
"Commit\r\n\r"
作为 .net 字符串。 我希望有一个 string.Unescape() 和 string.Escape() 方法对,但它似乎不存在。 我必须自己写吗?还是有更简单的方法来做到这一点?

如何在 .NET 中对字符串进行转义和重新转义?

c# .net string escaping
3个回答
44
投票
System.Text.RegularExpressions.Regex.Unescape(@"\r\n\t\t\t\t\t\t\t\t\tHello world!")

Regex.Unescape 方法文档


10
投票

汉斯代码,改进版本。

  1. 使用 StringBuilder - 长字符串上真正的性能增强器
  2. 使其成为扩展方法

    public static class StringUnescape
    {
        public static string Unescape(this string txt)
        {
            if (string.IsNullOrEmpty(txt)) { return txt; }
            StringBuilder retval = new StringBuilder(txt.Length);
            for (int ix = 0; ix < txt.Length; )
            {
                int jx = txt.IndexOf('\\', ix);
                if (jx < 0 || jx == txt.Length - 1) jx = txt.Length;
                retval.Append(txt, ix, jx - ix);
                if (jx >= txt.Length) break;
                switch (txt[jx + 1])
                {
                    case 'n': retval.Append('\n'); break;  // Line feed
                    case 'r': retval.Append('\r'); break;  // Carriage return
                    case 't': retval.Append('\t'); break;  // Tab
                    case '\\': retval.Append('\\'); break; // Don't escape
                    default:                                 // Unrecognized, copy as-is
                        retval.Append('\\').Append(txt[jx + 1]); break;
                }
                ix = jx + 2;
            }
            return retval.ToString();
        }
    }
    

4
投票

以下方法与 javascript escape/unescape 函数相同:

Microsoft.JScript.GlobalObject.unescape();

Microsoft.JScript.GlobalObject.escape();
© www.soinside.com 2019 - 2024. All rights reserved.