【问题标题】:Simple way to un-escape escaped unpritable encoded string returned by mvc application简单的方法来取消转义 mvc 应用程序返回的转义的 unpritable 编码字符串
【发布时间】:2015-09-19 20:23:23
【问题描述】:

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

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

“处理此请求时出现问题!\r\n查看详细日志\u003e d:\\Sandboxes\\UGBNC\\Stage\\Logs\\ArgLog2087129002.log”

我想要的是删除这些编码文本,如\u0027\r\n\\ 等,并在我的文本文件中正确格式化(例如,使用换行符、制表符等)。而且我不知道所有字符可能会出现什么,所以我不能用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);
    }
}

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

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

【问题讨论】:

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


【解决方案1】:

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

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

加长版:为可能面临类似问题的人提供更多详细信息。

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

“处理此请求时出现问题!\r\n查看详细日志\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() 方法在我的字符串上运行良好。此方法将字符串中的所有转义字符转换为它们的非转义形式。

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

查看thisthis 以获得更好的解决方案。

【讨论】:

    猜你喜欢
    • 2012-02-27
    • 2012-01-28
    • 2011-01-03
    • 1970-01-01
    • 2015-05-31
    • 2014-09-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多