protected void Page_Load (отправитель объекта , EventArgs e) { Response.ContentEncoding = Encoding.GetEncoding( " gb2312 " ); // Request.ContentEncoding = Encoding.GetEncoding("gb2312"); // Неверная настройка. }
Таким образом, мы используем gb2312 для каждого ответа. В соответствии с объектом requset по умолчанию asp.net при инициализации используется кодировка utf-8. Когда мы вводим китайский язык в текстовое поле и нажимаем кнопку, кодировка запроса — utf-. 8, а кодировка ответа — gb2312 , поэтому данные текстового поля при отправке обратно искажаются (в китайской части текстового поля отображается строка вопросительных знаков).
защищенное переопределение void InitializeCulture() { база .InitializeCulture(); Request.ContentEncoding = Encoding.GetEncoding( " gb2312 " ); }
Решение 2. Получите строку данных формы и проанализируйте ее самостоятельно.
Кодирование кодировки = Encoding.GetEncoding( " gb2312 " // Выбираем метод декодирования Stream resStream = Request.InputStream // Сюда помещаются полученные формы ; байт [] содержимое = новый байт [resStream.Length]; resStream.Read(content, 0 , content.Length); строка postQuery = coding.GetString(содержание); // NameValueCollection resDic = HttpUtility.ParseQueryString(postQuery,coding // Решаем проблему с кодировкой, по умолчанию она все равно будет декодироваться автоматически );
Ниже приведен простой метод анализа:
/// <сводка> /// Разбор строки запроса /// </summary> /// <param name="postQuery"></param> /// <возвращается></возвращается> частная NameValueCollection GetFormParams ( строка postQuery) { Результат NameValueCollection = новый NameValueCollection(); строка [] nameValueList = postQuery.Split( ' & ' ); foreach ( строковый элемент в nameValueList) { если (item.Contains( ' = ' )) { строка [] nameValue = item.Split( ' = ' ); result.Add(nameValue[ 0 ], nameValue[ 1 ]); } } вернуть результат; }