protected void Page_Load(オブジェクト送信者, EventArgs e) { Response.ContentEncoding = Encoding.GetEncoding( " gb2312 " ); // Request.ContentEncoding = Encoding.GetEncoding("gb2312"); //設定が無効です }
このように、asp.net のデフォルトの requset オブジェクトによれば、初期化時のエンコードは utf-8 であり、テキスト ボックスに中国語を入力してボタンをクリックすると、リクエストのエンコードは utf- になります。 8 であり、応答エンコーディングは gb2312 であるため、返送されるとテキスト ボックス データが文字化けします (テキスト ボックスの中国語部分に疑問符の文字列が表示されます)。
保護されたオーバーライドvoid InitializeCulture() { ベース.InitializeCulture(); Request.ContentEncoding = Encoding.GetEncoding( " gb2312 " ); }
解決策 2: フォーム データ文字列を取得して自分で解析する
エンコーディング encoding = Encoding.GetEncoding( " gb2312 " ); //デコード方式を選択 Stream resStream = Request.InputStream //受信したフォームがここに配置されます。 byte [] content =新しいバイト[resStream.Length]; resStream.Read(content, 0 , content.Length); 文字列postQuery =エンコーディング.GetString(content); // NameValueCollection resDic = HttpUtility.ParseQueryString(postQuery, encoding); //エンコードの問題を解決します。デフォルトでは引き続き自動的にデコードされます。
簡単な分析方法を以下に示します。
/// <概要> ///クエリ文字列を解析する/// </summary> /// <param name="postQuery"></param> /// <戻り値></戻り値> private NameValueCollection GetFormParams( string postQuery) { NameValueCollection の結果=新しいNameValueCollection(); 文字列[] nameValueList = postQuery.Split( ' & ' ); foreach (nameValueListの文字列項目) { if (item.Contains( ' = ' )) { string [] nameValue = item.Split( ' = ' ); result.Add(nameValue[ 0 ], nameValue[ 1 ]); } } 結果を返します。 }