2015-08-10 2 views
3

У меня есть URL-адрес, который содержит параметры, один из которых имеет кириллические буквы.URL unicode параметры декодирования C#

http://localhost/Print.aspx?id=4&subwebid=243572&docnumber=%u0417%u041f005637-1&deliverypoint=4630013519990

Doc-номер должен быть ЗП005637-1. Я пробовал следующий код, но строка по-прежнему с этими символами % u0417% u041f.

public static String DecodeUrlString(this String url) 
    { 
     String newUrl; 
     while ((newUrl = Uri.UnescapeDataString(url)) != url) 
      url = newUrl; 
     return newUrl; 
    } 

Невозможно использовать HttpUtility.

+1

Так что используйте код * from * HttpUtility; http://referencesource.microsoft.com/#System.Web/Util/HttpEncoder.cs,afac0d4e31f5382a –

+0

Возможный дубликат [Альтернатива HttpUtility.ParseQueryString без зависимости System.Web?] (http://stackoverflow.com/questions/ 27442985/alternative-to-httputility-parsequerystring-without-system-web-зависимость) –

ответ

1

Если ваша цель состоит в том, чтобы избежать зависимости от System.Web.dll, то вы обычно используете эквивалентный метод в WebUtility Class: WebUtility.UrlDecode Method.

Однако вы обнаружите, что даже тогда ваш URL-адрес не будет расшифровываться так, как вы этого хотите.

Это связано с тем, что WebUtility.UrlDecode не обрабатывает обозначение выхода %uNNNN нарочно. Обратите внимание на этот комментарий в source code:

// *** Source: alm/tfs_core/Framework/Common/UriUtility/HttpUtility.cs 
// This specific code was copied from above ASP.NET codebase. 
// Changes done - Removed the logic to handle %Uxxxx as it is not standards compliant. 

Как указано в комментарии, формат %uNNNN побег не совместим со стандартом и его следует избегать, если это возможно. Вы можете найти дополнительную информацию об этом и правильном способе кодирования URL-адресов от this thread.

Если у вас есть контроль над тем, как создается URL-адрес, подумайте об изменении его соответствия стандарту. В противном случае рассмотрите возможность добавления System.Web.dll в качестве зависимости, найдите другую стороннюю библиотеку, которая выполняет задание, или напишите свой собственный декодер. Как уже отмечалось, source code есть.

+1

+1 для последнего абзаца. '% uNNNN' обычно является признаком того, что что-то на стороне клиента использует устаревшую функцию' escape() 'JavaScript. Это не приводит к действительным URL-адресам: вызывается не только '% u' для символов Unicode, но и'% 'escape-файлов для 0x80-0xFF. Таким образом, лучшим решением является прекращение использования 'escape()' и перейдите в 'encodeURIComponent()' вместо этого. – bobince

Смежные вопросы