protected void Page_Load( 객체 전송자, EventArgs e) { Response.ContentEncoding = Encoding.GetEncoding( " gb2312 " ); // Request.ContentEncoding = Encoding.GetEncoding("gb2312") // 설정이 잘못되었습니다. }
이런 식으로 모든 응답에 gb2312를 사용합니다. asp.net 기본 requset 개체에 따르면 초기화 시 인코딩은 utf-8입니다. 텍스트 상자에 중국어를 입력하고 버튼 버튼을 클릭하면 요청 인코딩이 utf-8입니다. 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); string postQuery = 인코딩.GetString(content); // NameValueCollection resDic = HttpUtility.ParseQueryString(postQuery, 인코딩); // 인코딩 문제를 해결합니다. 기본적으로 자동으로 디코딩됩니다.
간단한 분석 방법은 다음과 같습니다.
/// <요약> /// 쿼리 문자열 구문 분석 /// </summary> /// <param name="postQuery"></param> /// <반환></반환> 개인 NameValueCollection GetFormParams( 문자열 postQuery) { NameValueCollection 결과 = new NameValueCollection(); string [] nameValueList = postQuery.Split( ' & ' ); foreach (nameValueList 의 문자열 항목 ) { if (item.Contains( ' = ' )) { string [] nameValue = item.Split( ' = ' ); result.Add(nameValue[ 0 ], nameValue[ 1 ]); } } 결과 반환 ; }