Martin at Mennt
Martin at Mennt

Reputation: 5737

Unescape JavaScript's escape() using C#

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

I have a JSON string 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?

Upvotes: 50

Views: 51044

Answers (7)

Vinicius
Vinicius

Reputation: 1711

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

Upvotes: 11

Michael Ross
Michael Ross

Reputation: 19

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 áéíóúñ.

Upvotes: 1

Christoph Ammann
Christoph Ammann

Reputation: 29

    internal static string UnJavascriptEscape(string s)
    {
        // undo the effects of JavaScript's escape function
        return HttpUtility.UrlDecode(s.Replace("+", "%2b"), Encoding.Default);
    }

Upvotes: 2

MunsterMan
MunsterMan

Reputation: 305

I spent 8 hours trying to get

HttpUtility.UrlDecode 

to work, and gave up and used

HttpUtility.HtmlDecode

which worked instantly.

Upvotes: 0

Awerealis
Awerealis

Reputation: 612

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

Upvotes: 5

BrunoLM
BrunoLM

Reputation: 100381

escape() is equivalent to

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

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

Upvotes: 22

Justin Niessner
Justin Niessner

Reputation: 245479

HttpUtility.UrlDecode should do the trick.

Upvotes: 74

Related Questions