简单的方法来反转义转义不可复制的编码字符串由mvc应用程序返回



我检查了SO上的其他类似问题,他们要么建议使用WebUtility.HtmlDecode()或逐字符替换编码部分或假设一些已知的正则表达式模式等。他们没有回答这个特定的问题。

我有一个c#控制台应用程序,它向MVC应用程序发布一些数据。然后将服务返回的消息写入一个简单的文本文件。当我将它写入文件时,文本就像

"处理此请求时出错了! "r n查看详细日志u003e d:\Sandboxes\UGBNC\Stage\ logs \ArgLog2087129002.log"

我想要的是删除这些编码文本,如u0027, rn, \等,并在我的文本文件中正确格式化(如,用新行,制表符等)。我不知道所有的字符可能会出现,所以我不能用string replaceregex replace 代替它们,我需要一个通用的解决方案。

MVC服务返回数据作为json与Content-Type: application/json; charset=utf-8,我的客户端代码是这个

try
{
    using (var client = new HttpClient())
    {
        var request = WebRequest.Create(uri);
        //configure request details
        using (HttpWebResponse response = (HttpWebResponse)request.GetResponse())
        using (StreamReader sr = new StreamReader(response.GetResponseStream()))
        {
            var message = sr.ReadToEnd();
            //process message
        }
    }
}
catch (WebException wex)
{
    using (var stream = wex.Response.GetResponseStream())
    using (var reader = new StreamReader(stream))
    {
        var message = reader.ReadToEnd(); //this is the encoded string
        File.AppendAllText("SomeTextFile.txt", message);
    }
}

最好/最简单的方法是什么?

注意:我不想一个字符一个字符地替换它们,我想要一个通用的解决方案。

从评论中的链接中,我得到了一个工作解决方案,感谢这篇文章。简而言之,这个方法现在有效。

var unescapedString = System.Text.RegularExpressions.Regex.Unescape(escapedString);

较长版本:为可能面临类似问题的人提供更多细节。

这是一个典型的字符串示例,我试图使其合理(可读&可打印)

"处理此请求时出错了! "rnSee详细日志u003e d:SandboxesUGBNCStage logs ArgLog2087129002.log"

(1)虽然字符串来自web响应,但这不是HTML,而是JSON。所以,HTML解码方法像新的WebUtility.HtmlDecode(str)或旧的系统。Web HttpUtility.HtmlDecode(str)无法工作。

(2)像u0027这样的字符是unicode字符(这是为'撇号),但尝试System.Text.Encoding.Unicode没有产生好的结果。(也许我错过了诀窍!)

(3)基本上我需要的是转换字符像u0027, rn, \到他们的可打印格式。为此,System.Text.RegularExpressions.Regex.Unescape()方法在我的字符串上工作得很好。此方法将字符串中的所有转义字符转换为未转义的形式。

注意:任何使用此方法的人,请先参考msdn文档。这种方法有一定的局限性,它并不完美,在某些情况下可能会给出错误的结果。

检查这个&

最新更新