C# 取消转义mvc应用程序返回的转义不可写入编码字符串的简单方法

C# 取消转义mvc应用程序返回的转义不可写入编码字符串的简单方法,c#,asp.net-mvc,string,encoding,escaping,C#,Asp.net Mvc,String,Encoding,Escaping,我检查了其他类似的问题,他们要么建议使用WebUtility.HtmlDecode(),要么逐个字符替换编码部分,或者假设一些已知的正则表达式模式,等等。他们不回答这个特定的查询 我有一个C#控制台应用程序,它将一些数据发布到MVC应用程序。然后,服务返回的消息被写入一个简单的文本文件。当我将其写入文件时,文本如下 “处理此请求时,\u0027出现问题!\r\n请参阅详细日志\u003e d:\\Sandboxes\\UGBNC\\Stage\\logs\\ArgLog2087129002.lo

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

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

“处理此请求时,\u0027出现问题!\r\n请参阅详细日志\u003e d:\\Sandboxes\\UGBNC\\Stage\\logs\\ArgLog2087129002.log”

我想要的是删除这些编码文本,如
\u0027
\r\n
\\
等,并在我的文本文件中正确格式化(如使用新行、制表符等)。我不知道所有的字符可能都是什么,所以我不能用
string replace
regex replace
替换它们,我需要一个通用的解决方案

MVC服务以json的形式返回数据,内容类型为: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);
更长的版本:为那些可能面临类似问题的人提供更多的细节

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

“处理此请求时,\u0027出现问题!\r\n请参阅详细日志\u003e d:\Sandboxes\UGBNC\Stage\logs\ArgLog2087129002.log”

(1) 虽然字符串来自web响应,但这不是HTML,而是JSON。因此,像new
WebUtility.HtmlDecode(str)
或旧版System.Web
HttpUtility.HtmlDecode(str)
这样的HTML解码方法不起作用

(2) 像
\u0027
这样的字符是unicode字符(这些字符表示撇号”),但尝试使用
System.Text.Encoding.unicode
并没有产生好的结果。(也许我错过了把戏!)

(3) 基本上,我需要的是将
\u0027
\r\n
\\
等字符转换为可打印格式。为此,
System.Text.RegularExpressions.Regex.Unescape()
方法在我的字符串上运行良好。此方法将字符串中的所有转义字符转换为其未转义形式

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


检查并获得更好的解决方案。

此处标记的问题可能重复,但实际上解决了问题(至少目前如此),感谢您的指导。原帖