Проблемы с кодировкой символов UTF-8 из строки строки запроса URL-адреса в Internet Explorer 9
Я нахожу странную проблему в Internet Explorer, особенно IE9, при попытке отобразить специальные символы (немецкие акцентированные символы), представленные в строке запроса URL. Это работает как в Firefox, так и в Chrome.
Например, URL-адрес, с которым я работаю, выглядит примерно так:
http://mysite.com/TestPage.aspx?Title=Hochauflösendes®
Я также пробовал URL-адрес URL-адреса URL-адреса:
http://mysite.com/TestPage.aspx?Title=Hochaufl%C3%B6sendes%C2%AE
В любом случае, когда я пытаюсь отобразить значение строки запроса "Название" на моей странице с помощью Request.QueryString["Title"]
, IE не отображает символы правильно:
Hochaufl�sendes�
Если я жестко программирую текст непосредственно на странице, он отображается правильно во всех браузерах. Это только при извлечении из строки запроса, где возникает проблема.
Страница сохраняется как кодировка UTF-8, и при необходимости на моей странице есть тег meta
:
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
Я также просмотрел заголовок страницы и содержимое через Fiddler, и вся кодировка верна.
Что может заставить IE не отображать специальные символы правильно?
Ответы
Ответ 1
Как было предложено Aristos, использование HttpContext.Current.Request.RawUrl
работало для моей ситуации.
Чтобы получить истинное значение строки запроса из RawUrl, можно использовать простой метод:
private string GetQueryStringValueFromRawUrl(string queryStringKey)
{
var currentUri = new Uri(HttpContext.Current.Request.Url.Scheme + "://" +
HttpContext.Current.Request.Url.Authority +
HttpContext.Current.Request.RawUrl);
var queryStringCollection = HttpUtility.ParseQueryString((currentUri).Query);
return queryStringCollection.Get(queryStringKey);
}
Извлечение значения с использованием этого метода было проверено как работающее в IE8 и IE9. Исправлена ошибка в IE10.