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

时间:2012-07-20 17:24:31

标签: c# .net

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

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

这是一个示例字符串

  

“测试\ 40gmail.com”

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

  

“test@gmail.com”

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

非常感谢任何帮助或信息

4 个答案:

答案 0 :(得分:9)

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

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();
}

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

答案 1 :(得分:0)

string test = "test\40gmail.com";

test.replace(@"\40","@");

如果你想要更通用的方法......

HTML Decode

答案 2 :(得分:0)

提供的示例字符串("test\40gmail.com")为JID escaped。它没有格式错误,HttpUtility / WebUtility无法正确处理此转义计划。

你可以使用字符串或正则表达式函数来完成它,如dasblinkenlight和C.Barlow的答案所示。这可能是达到理想结果的最简洁方法。我不知道任何用于解码JID转义的.NET库,并且简短的搜索没有发现太多。 Here is a link可能对某些可能有用的来源{/ 3}。

答案 3 :(得分:0)

我刚刚编写了这段代码,它看起来效果很好......它要求转义序列是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;
}