Конференция ".Net" » Кодировка Response.StatusDescription в ASP.Net (VS2008) [C#]
 
  • evvcom © (18.03.10 17:43) [0]
    Всем привет, давно я тут не был :)
    Ну вот и я окунулся в .Net, в связи с чем появился этот вопрос.

    Итак, что мы имеем. Имеем старого клиента, установленного на очень многие машины, обращающийся к WEB-серверу. Стоит некоторая задача, которая вобщем-то уже решена, с таким условием, что клиента мы не меняем, дабы не иметь геморрой по переустановке новых версий на тысячах машин пользователей, а обходимся только изменениями на сервере.

    Было решено старые ASP переписать под .Net. Используя URL Rewriting задача решена. Осталась одна проблема. Клиенту возвращается код ошибки, как и полагается в Response.StatusCode, а текст в Response.StatusDescription. Но вот засада, клиент ждет Win-1251, а ASP.Net возвращает utf-8. Тип свойства StatusDescription string (C#) и любые мои игры с разными Encoding: копирование в массив byte[] и дальнейшее копирование в string, якобы в другой кодировке, ни к чему не привели:
    private static string UTF8ToWin1251(string src)
           {
               Encoding utf8 = Encoding.GetEncoding("UTF-8");
               Encoding win1251 = Encoding.GetEncoding(1251);
               byte[] utf8Bytes = new UTF8Encoding().GetBytes(src);
               //byte[] win1251Bytes = Encoding.Convert(utf8, win1251, utf8Bytes);
               string result = win1251.GetString(utf8Bytes);
               return result;
           }


    как только идет копирование в string, где-то в недрах автоматом, видимо, делается преобразование в utf-8.

    Не помогает и это:
               HttpContext ctx = HttpContext.Current;
               ctx.Response.Charset = "windows-1251";
               ctx.Response.ContentEncoding = Encoding.GetEncoding(1251);
               ctx.Response.HeaderEncoding = Encoding.GetEncoding(1251);



    Не помогает и настройка в Web.config:
    <globalization requestEncoding="windows-1251" responseEncoding="windows-1251" />



    Встречался ли кто-нибудь с такой проблемой? Кто что подскажет?
  • evvcom © (22.03.10 14:56) [1]
    Может кто подскажет, где вообще StatusDescription передается?
    Предполагаю, что в http-заголовке, но тогда непонятно, почему
    ctx.Response.HeaderEncoding = Encoding.GetEncoding(1251);


    не отрабатывает?
    Надо, наверное, заставить админов проверить, все ли сервис-паки накачены?
 
Конференция ".Net" » Кодировка Response.StatusDescription в ASP.Net (VS2008) [C#]
Есть новые Нет новых   [134427   +34][b:0][p:0.001]