简单的方法来反转义转义不可复制的编码字符串由mvc应用程序返回
本文关键字:转义 字符串 应用程序 返回 编码字符 mvc 可复制 方法 简单 编码 | 更新日期: 2023-09-27 18:13:25
我检查了SO上的其他类似问题,他们要么建议使用WebUtility.HtmlDecode()或逐字符替换编码部分或假设一些已知的正则表达式模式等。他们没有回答这个特定的问题。
我有一个c#控制台应用程序,它向MVC应用程序发布一些数据。然后将服务返回的消息写入一个简单的文本文件。当我将它写入文件时,文本就像"处理此请求时出错了! "'r' n查看详细日志'u003e d:''Sandboxes''UGBNC''Stage'' logs ''ArgLog2087129002.log"
我想要的是删除这些编码文本,如'u0027
, 'r'n
, ''
等,并在我的文本文件中正确格式化(如,用新行,制表符等)。我不知道所有的字符可能会出现,所以我不能用string replace
或regex 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);
较长版本:为可能面临类似问题的人提供更多细节。
这是一个典型的字符串示例,我试图使其合理(可读&可打印)
"处理此请求时出错了! "'r'nSee详细日志'u003e d:'Sandboxes'UGBNC'Stage' logs 'ArgLog2087129002.log"
(1)虽然字符串来自web响应,但这不是HTML,而是JSON。所以,HTML解码方法像新的WebUtility.HtmlDecode(str)
或旧的系统。Web HttpUtility.HtmlDecode(str)
无法工作。
(2)像'u0027
这样的字符是unicode字符(这是为'撇号),但尝试System.Text.Encoding.Unicode
没有产生好的结果。(也许我错过了诀窍!)
(3)基本上我需要的是转换字符像'u0027
, 'r'n
, ''
到他们的可打印格式。为此,System.Text.RegularExpressions.Regex.Unescape()
方法在我的字符串上工作得很好。此方法将字符串中的所有转义字符转换为未转义的形式。
注意:任何使用此方法的人,请先参考msdn文档。这种方法有一定的局限性,它并不完美,在某些情况下可能会给出错误的结果。
检查这个&