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 ]);
}
}
결과 반환 ;
}