我需要在 WPF 控件上有一个 TextBox,它可以接收像
Commit\r\n\r
这样的文本(这是 .net 字符串 "Commit\\r\\n\\r"
)并将其转换回 "Commit\r\n\r"
作为 .net 字符串。 我希望有一个 string.Unescape() 和 string.Escape() 方法对,但它似乎不存在。 我必须自己写吗?还是有更简单的方法来做到这一点?
如何在 .NET 中对字符串进行转义和重新转义?
System.Text.RegularExpressions.Regex.Unescape(@"\r\n\t\t\t\t\t\t\t\t\tHello world!")
汉斯代码,改进版本。
使其成为扩展方法
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();
}
}
以下方法与 javascript escape/unescape 函数相同:
Microsoft.JScript.GlobalObject.unescape();
Microsoft.JScript.GlobalObject.escape();