Сломанная кодировка после обратной передачи - PullRequest
0 голосов
/ 05 июля 2010

У меня есть строка запроса со значением параметра, содержащая норвежский символ å, закодированный как %e5. Страница содержит форму с атрибутом действия, которая автоматически заполняется ASP.Net. Когда URL-адрес выводится в указанный атрибут, он печатается с полной двухбайтовой кодировкой: %u00e5.

При повторной публикации это нормально при отладке кода. Однако страница фактически выполняет перенаправление на себя (по какой-то другой причине), и заголовок местоположения перенаправления выглядит следующим образом: Location: /myFolder/MyPage.aspx?Param1=%C3%A5

Таким образом, %e5 было переведено в %C3%A5, что как-то нарушает вывод.

В тексте HTML разбитые символы выглядят как Ã¥ после вывода через HttpUtility.HtmlEncode.

Все веб-приложение в кодировке ISO8859-1.

PS. При удалении u00 из вывода %u00e5 в атрибуте action перед отправкой формы все выводится красиво. Но ошибка, кажется, перевод с %e5 на %C3%A5. (И, конечно, само перенаправление, но это другое дело.)

Есть указатели?

1 Ответ

0 голосов
/ 08 июля 2010

Решением, которое я выбрал, было ручное кодирование URL перенаправления.

public void ReloadPage()
{
    UrlBuilder url = new UrlBuilder(Context, Request.Path);
    foreach (string queryParam in Request.QueryString.AllKeys)
    {
        string queryParamValue = Request.QueryString[queryParam];
        url.AddQueryItem(queryParam, queryParamValue);
    }
    Response.Redirect( url.ToString(), true);
}

url.AddQueryItem в основном выполняет HttpContext.Server.UrlDecode (queryParamValue), а url.ToString создает строку запроса, а для каждого элемента запроса выполняется HttpContext.Server.UrlEncode (queryParamValue).

UrlBuilder - это класс, уже присутствующий в нашей библиотеке, поэтому, как только я обнаружил проблему и понял, что C # /. Net не предоставляет инструментов для этого, программирование было быстрым:)

...