Запрос - это что-то, что клиент отправил вам. Вы не можете выбрать, что он посылает, это ваш вклад. Однако клиент, вероятно, должен отправлять эти входные данные в кодировке, определенной на странице, содержащей форму.
Правильно ли установлена кодировка на странице? Вы уверены, что не отправляете, например,
<meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
в заголовке HTML, а данные в другой кодировке?
Добавлено после комментариев: Если я правильно понимаю, вы генерируете выходную страницу в кодировке, отличной от UTF-8 (вы уверены, что вам нужно это сделать?). После чего у вас возникают проблемы с декодированием данных формы POSTed обратно. Простейшим способом было бы обеспечить отправку данных обратно в UTF-8. Для этого HTML определяет атрибут accept-charset
в form
. Однако атрибут не поддерживается в IE. Для IE есть хак : вы можете попробовать добавить фальшивый <input>
, содержащий любой «странный» символ Unicode, чтобы заставить IE писать как UTF-8.
Что не очень приятно, более простым решением было бы просто всегда использовать UTF-8 - вам действительно нужно использовать разные кодировки для вашей выходной страницы?
Или, если вам нужно вывести данные в другой кодировке, решение для установки Request.ContentEncoding
- это единственный способ использовать AFAIAA. Чтобы определить используемую кодировку, я бы рекомендовал добавить скрытое поле, которое отправляется обратно POST (теоретически вы можете использовать заголовки HTTP, но я не думаю, что браузеры отправляют их с данными POST), чтобы использовать что-то вроде этого:
public void Application_BeginRequest(object sender, EventArgs args)
{
var inputEncoding = Request.Form["hiddenEncoding"];
if (!String.IsNullOrEmpty(inputEncoding)) Request.ContentEncoding = Encoding.GetEncoding(inputEncoding);
}