开发者

Unescape JavaScript's escape() using C#

Are the any functions in C# that handle escape/unescape like JavaScript?

I have a JSON stri开发者_StackOverflowng like this:

{"Feeds":[{"Url":"www.test.com","FeedType":"Twitter"},{"Url":"www.test2.com","FeedType":"Youtube"}]}

Which looks like this after 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

In my C# code I would like to unescape this string so that it looks exactly the same as it did before the escape()

Is this possible?


HttpUtility.UrlDecode should do the trick.


escape() is equivalent to

HttpUtility.UrlDecode(str, System.Text.Encoding.Default);

By default the UrlDecode uses UTF8 while escape() don't.


This is the best way I found to work with these:

Encode in C#:

System.Uri.EscapeDataString("<string>");

Decode in JavaScript:

decodeURI("<string>");

Encode in JavaScript:

encodeURI("<string>");

Decode in C#:

System.Uri.UnescapeDataString("<string>");

Update 27-Jan-2016: Just found what seems do be a more compatible way to do it, which also encodes the URI protocol (http://) using javascript:

Encode in JavaScript:

encodeURIComponent("<string>");

Decode in JavaScript:

decodeURIComponent("<string>");


Aw man, why do we over-think stuff so much sometimes. When an API function is being silly, send a karma cuss at the library developer, then work-around it...

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);
    }


To unescape without having to reference System.Web in order to use HttpUtility, try this:

Str = Str.Replace("+", " ");
Str = Regex.Replace(Str, "%([A-Fa-f\\d]{2})", a => "" + Convert.ToChar(Convert.ToInt32(a.Groups[1].Value, 16)));

Also, when I tried HttpUtility.UrlDecode, it didn't work for special characters áéíóúñ.


I spent 8 hours trying to get

HttpUtility.UrlDecode 

to work, and gave up and used

HttpUtility.HtmlDecode

which worked instantly.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜