Ответ 1
HttpUtility.UrlDecode
должен сделать трюк.
Являются ли какие-либо функции в С#, которые обрабатывают escape/unescape, например JavaScript?
У меня есть строка JSON как это:
{"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
В моем коде С# я хотел бы удалить эту строку, чтобы она выглядела точно так же, как и до escape()
Возможно ли это?
HttpUtility.UrlDecode
должен сделать трюк.
escape()
эквивалентно
HttpUtility.UrlDecode(str, System.Text.Encoding.Default);
По умолчанию UrlDecode
использует UTF8, а escape()
- нет.
Это лучший способ найти работу с ними:
Кодировать в С#:
System.Uri.EscapeDataString("<string>");
Декодирование в JavaScript:
decodeURI("<string>");
Кодировать в JavaScript:
encodeURI("<string>");
Декодирование в С#:
System.Uri.UnescapeDataString("<string>");
Обновление 27 января-2016. Просто нашел, что похоже на более совместимый способ сделать это, который также кодирует URI-протокол (http://) с помощью javascript:
Кодировать в JavaScript:
encodeURIComponent("<string>");
Декодирование в JavaScript:
decodeURIComponent("<string>");
Человек, почему мы слишком много думаем об этом. Когда функция API является глупой, отправьте карма-крик в разработчик библиотеки, затем обходите ее...
HttpUtility.UrlEncode(editext, System.Text.Encoding.Default).Replace("+","%20");
internal static string UnJavascriptEscape(string s)
{
// undo the effects of JavaScript escape function
return HttpUtility.UrlDecode(s.Replace("+", "%2b"), Encoding.Default);
}
Чтобы unescape без необходимости ссылаться на System.Web, чтобы использовать HttpUtility, попробуйте следующее:
Str = Str.Replace("+", " ");
Str = Regex.Replace(Str, "%([A-Fa-f\\d]{2})", a => "" + Convert.ToChar(Convert.ToInt32(a.Groups[1].Value, 16)));
Кроме того, когда я пробовал HttpUtility.UrlDecode, он не работал для специальных символов & aacute; & eacute; & iacute; & oacute; & uacute; & ntilde;.
Я потратил 8 часов, пытаясь получить
HttpUtility.UrlDecode
чтобы работать, и отказался и использовал
HttpUtility.HtmlDecode
который работал мгновенно.