我已经在 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 replace
或regex 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第一的。这种方法有一些局限性,它并不完美,在某些情况下可能会给出错误的结果。
关于c# - 取消转义由 mvc 应用程序返回的转义 unpritable 编码字符串的简单方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32672834/