Unescape JavaScript的escape()使用C#
C#中的任何函数是否像JavaScript一样处理escape / unescape?
我有这样的JSONstring:
{"Feeds":[{"Url":"www.test.com","FeedType":"Twitter"},{"Url":"www.test2.com","FeedType":"Youtube"}]}
看起来像这样escape()
%7B%22Feeds%22%3A%5B%7B%22Url%22%3A%22www.test.com%22%2C%22FeedType%22%3A%22Twitter%22%7D%2C%7B%22Url%22%3A%22www.test2.com%22%2C%22FeedType%22%3A%22Youtube%22%7D%5D%7D
在我的C#代码中,我想escape()
这个string,使它看起来和escape()
之前的完全一样,
这可能吗?
HttpUtility.UrlDecode
应该做的伎俩。
escape()
相当于
HttpUtility.UrlDecode(str, System.Text.Encoding.Default);
默认情况下, UrlDecode
使用UTF8,而escape()
不使用UTF8。
这是我发现与这些工作最好的方式:
用C#编码:
System.Uri.EscapeDataString("<string>");
JavaScript解码:
decodeURI("<string>");
在JavaScript中编码:
encodeURI("<string>");
在C#中解码:
System.Uri.UnescapeDataString("<string>");
更新27-Jan-2016 :刚刚发现似乎是一个更兼容的方式来做到这一点,它也使用javascript编码URI协议(http://):
在JavaScript中编码:
encodeURIComponent("<string>");
JavaScript解码:
decodeURIComponent("<string>");
唉,为什么我们有时候会这么想呢? 当一个API函数很愚蠢的时候,向图书馆开发者发送一个karma cuss,然后解决它…
HttpUtility.UrlEncode(editext, System.Text.Encoding.Default).Replace("+","%20");
internal static string UnJavascriptEscape(string s) { // undo the effects of JavaScript's escape function return HttpUtility.UrlDecode(s.Replace("+", "%2b"), Encoding.Default); }
为了避免使用HttpUtility而不必引用System.Web,请尝试以下操作:
Str = Str.Replace("+", " "); Str = Regex.Replace(Str, "%([A-Fa-f\\d]{2})", a => "" + Convert.ToChar(Convert.ToInt32(a.Groups[1].Value, 16)));
另外,当我尝试HttpUtility.UrlDecode时,它不适用于特殊字符áéíóúñ。
我花了8个小时试图获得
HttpUtility.UrlDecode
工作,放弃和使用
HttpUtility.HtmlDecode
哪些工作立即。