У вас есть эта строка кода: -
String sSentSearchText = postedValues[i];
Здесь произошла расшифровка октетов в посте.
Проблема в том, что http-эквивалент META не сообщает серверу о кодировке.
Вы можете просто добавить RequestEncoding = "ISO-8859-1" в директиву @Page и прекратить пытаться возиться с декодированием самостоятельно (поскольку это уже произошло).
Это тоже не поможет. Кажется, вы можете указать только кодировку запроса в файле web.config.
Лучше было бы вообще прекратить использование ISO-8859-1 и оставить для него кодировку UTF-8 по умолчанию. Я не вижу никакой выгоды и только боли при использовании ограничительного кодирования.
Редактировать
Если кажется, что изменение кодировки форм публикации невозможно, то у нас, похоже, не остается другой альтернативы, кроме как самим заниматься декодированием. Для этого включите эти два статических метода в ваш принимающий код: -
private static NameValueCollection GetEncodedForm(System.IO.Stream stream, Encoding encoding)
{
System.IO.StreamReader reader = new System.IO.StreamReader(stream, Encoding.ASCII);
return GetEncodedForm(reader.ReadToEnd(), encoding);
}
private static NameValueCollection GetEncodedForm(string urlEncoded, Encoding encoding)
{
NameValueCollection form = new NameValueCollection();
string[] pairs = urlEncoded.Split("&".ToCharArray(), StringSplitOptions.RemoveEmptyEntries);
foreach (string pair in pairs)
{
string[] pairItems = pair.Split("=".ToCharArray(), 2, StringSplitOptions.RemoveEmptyEntries);
string name = HttpUtility.UrlDecode(pairItems[0], encoding);
string value = (pairItems.Length > 1) ? HttpUtility.UrlDecode(pairItems[1], encoding) : null;
form.Add(name, value);
}
return form;
}
Теперь вместо назначения: -
postedValues = Request.Form;
использование: -
postValues = GetEncodedForm(Request.InputStream, Encoding.GetEncoding("ISO-8859-1"));
Теперь вы можете удалить кодировку marlarky из остальной части кода.