如何将包含转义字符的字符串转换为字符串

我有一个返回给我的字符串,其中包含转义字符。

我似乎有一个小问题,任何人都可以帮忙吗?

这是一个示例字符串

“测试\ 40gmail.com”

如您所见,它包含转义字符。 我需要它转换为它的实际值

“test@gmail.com”

任何想法如何做到这一点?

任何帮助或信息将不胜感激

如果您要替换所有转义的字符代码,而不仅仅是@的代码,您可以使用此代码段进行转换:

 public static string UnescapeCodes(string src) { var rx = new Regex("\\\\([0-9A-Fa-f]+)"); var res = new StringBuilder(); var pos = 0; foreach (Match m in rx.Matches(src)) { res.Append(src.Substring(pos, m.Index - pos)); pos = m.Index + m.Length; res.Append((char)Convert.ToInt32(m.Groups[1].ToString(), 16)); } res.Append(src.Substring(pos)); return res.ToString(); } 

代码依赖于正则表达式来查找所有hex数字序列,将它们转换为int ,并将结果值转换为char

HttpUtility和WebUtility都有解码方法 – 请参考这个如何在C#中解码HTML字符?

 string test = "test\40gmail.com"; test.replace(@"\40","@"); 

如果你想要一个更通用的方法……

HTML解码

提供的示例字符串( "test\40gmail.com" )是JID转义的 。 它没有格式错误,并且HttpUtility / WebUtility无法正确处理这种转义方案。

你可以使用字符串或正则表达式函数来完成它,正如dasblinkenlight和C.Barlow的答案中所建议的那样。 这可能是达到理想结果的最简洁方法。 我不知道任何用于解码JID转义的.NET库,并且简短的搜索没有发现太多。 这里有一些链接到一些可能有用的源。

我刚刚编写了这段代码,它看起来效果很好……它要求转义序列在HEX中,并且对于值0x000xFF有效。

 // Example str = remEscChars(@"Test\x0D") // str = "Test\r" 

这是代码。

 private string remEscChars(string str) { int pos = 0; string subStr = null; string escStr = null; try { while ((pos = str.IndexOf(@"\x")) >= 0) { subStr = str.Substring(pos + 2, 2); escStr = Convert.ToString(Convert.ToChar(Convert.ToInt32(subStr, 16))); str = str.Replace(@"\x" + subStr, escStr); } } catch (Exception ex) { throw ex; } return str; }