c# - 取消转义由 mvc 应用程序返回的转义 unpritable 编码字符串的简单方法

标签 c# asp.net-mvc string encoding escaping

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

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

"Something didn\u0027t work right while processing this request! \r\nSee detailed logs \u003e d:\\Sandboxes\\UGBNC\\Stage\\Logs\\ArgLog2087129002.log"

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

MVC 服务以 Content-Type: application/json; 的形式返回 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);
    }
}

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

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

最佳答案

感谢this post,我从评论中的链接得到了一个可行的解决方案 .简而言之,这暂时有效。

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

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

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

"Something didn\u0027t work right while processing this request! \r\nSee detailed logs \u003e d:\Sandboxes\UGBNC\Stage\Logs\ArgLog2087129002.log"

(1) 虽然字符串来自网络响应,但这不是 HTML,而是 JSON。因此,新的 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() 方法在我的字符串上运行良好。此方法将字符串中的所有转义字符转换为其非转义形式。

注意:使用此方法的 friend 请引用msdn doc第一的。这种方法有一些局限性,它并不完美,在某些情况下可能会给出错误的结果。

检查 this & this以获得更好的解决方案。

关于c# - 取消转义由 mvc 应用程序返回的转义 unpritable 编码字符串的简单方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32672834/

相关文章:

c# - ASP.NET MVC Beta 1 - 它是否支持强类型 View 数据?

asp.net-mvc - 如何在 MVC 中使用 HtmlHelper 获取自定义 id 进行渲染

java - 我怎样才能让这个 switch 语句使用扫描仪工作?

c# - 使用 C# 创建新的 Excel 函数(用户定义函数)

c# - 南希.ViewEngines.ViewNotFoundException : Unable to locate view 'Index'

python - 当分隔符两侧的字符不是数字时,在 python 中分割字符串

java - 如何停止覆盖txt文件并让它在新行中写入

c# - Windows 8 中的自然语言处理

c# - 在使用 System.IO.Compression 提取文件期间强制替换现有文件?

c# - 从 XML 读取值