โมฆะ ที่ได้รับการป้องกัน Page_Load (ผู้ส่ง วัตถุ EventArgs e) - Response.ContentEncoding = การเข้ารหัส GetEncoding( " gb2312 " ); // Request.ContentEncoding = Encoding.GetEncoding("gb2312"); // การตั้งค่าไม่ถูกต้อง -
ด้วยวิธีนี้ เราใช้ gb2312 สำหรับทุกการตอบสนอง ตามวัตถุ requset เริ่มต้นของ asp.net การเข้ารหัสจะเป็น utf-8 เมื่อเริ่มต้น เมื่อเราป้อนภาษาจีนในกล่องข้อความและคลิกปุ่ม การเข้ารหัสคำขอจะเป็น utf- 8 และการเข้ารหัสการตอบสนองคือ gb2312 ดังนั้นข้อมูลกล่องข้อความจึงอ่านไม่ออกเมื่อส่งกลับ (ส่วนภาษาจีนของกล่องข้อความจะแสดงชุดเครื่องหมายคำถาม)
ป้องกัน แทนที่เป็น โมฆะ InitializeCulture () - ฐาน .InitializeCulture(); Request.ContentEncoding = การเข้ารหัส GetEncoding( " gb2312 " ); -
โซลูชันที่ 2: รับสตริงข้อมูลของฟอร์มและแยกวิเคราะห์ด้วยตนเอง
การเข้ารหัส การเข้ารหัส = Encoding.GetEncoding( " gb2312 " ); // เลือกวิธีการถอดรหัส Stream resStream = Request.InputStream; // แบบฟอร์มที่ได้รับจะถูกวางไว้ที่นี่ เนื้อหา ไบต์ [] = ไบต์ ใหม่ [resStream.Length]; resStream.Read (เนื้อหา, 0 , เนื้อหาความยาว); string postQuery = encoding.GetString (เนื้อหา); // NameValueCollection resDic = HttpUtility.ParseQueryString(postQuery, encoding); // แก้ไขปัญหาการเข้ารหัส โดยจะยังคงถอดรหัสโดยอัตโนมัติตามค่าเริ่มต้น
วิธีการวิเคราะห์อย่างง่ายมีดังต่อไปนี้:
/// <สรุป> /// แยกวิเคราะห์สตริงแบบสอบถาม /// </summary> /// <ชื่อพารามิเตอร์ = "postQuery" ></ param> /// <ส่งคืน></ส่งคืน> NameValueCollection GetFormParams ส่วนตัว ( สตริง postQuery) - ผลลัพธ์ NameValueCollection = NameValueCollection ใหม่ (); สตริง [] nameValueList = postQuery.Split( ' & ' ); foreach (รายการ สตริง ใน nameValueList) - ถ้า (item.Contains( ' = ' )) - สตริง [] nameValue = item.Split( ' = ' ); result.Add(nameValue[ 0 ], nameValue[ 1 ]); - - ส่งคืน ผลลัพธ์; -