ในระบบที่ฉันทำงานเมื่อเร็วๆ นี้ ฉันพบปัญหา ระบบการซื้อขายใช้การเข้ารหัส UTF-8 ในขณะที่ระบบสนับสนุนบางระบบใช้การเข้ารหัส GB2312
หากหน้าและสคริปต์ที่มีการเข้ารหัสต่างกันอ้างอิงถึงกัน อักขระที่อ่านไม่ออกจะเกิดขึ้น วิธีแก้ไขคือรวมเป็นการเข้ารหัสเดียว
ใน asp.net หากคุณต้องการแก้ไขการเข้ารหัสของหน้าเอาต์พุต คุณสามารถแก้ไขข้อมูลการกำหนดค่าต่อไปนี้ใน web.config
< globalization requestEncoding="utf-8" responseEncoding="utf-8" />
ข้างต้นเป็นเพียงการแก้ไขการเข้ารหัสเริ่มต้นโดยรวม หากจำเป็นต้องแก้ไขการเข้ารหัสของบางหน้าเท่านั้น คุณสามารถใช้โค้ดต่อไปนี้ใน ASP.net:
หมายเหตุ: เพียงเพิ่มไว้ด้านล่างเหตุการณ์ Page_Load()
การเข้ารหัส gb2312 = การเข้ารหัส GetEncoding("gb2312");
การตอบสนอง ContentEncoding = gb2312;
ในแอปพลิเคชันที่ไม่ใช่ ASP.net ข้อมูลที่คุณอาจอ่านจะมีการเข้ารหัส UTF-8 แต่หากคุณต้องการแปลงเป็นการเข้ารหัส GB2312 คุณสามารถดูโค้ดต่อไปนี้ได้:
string utfinfo = "document.write("alert('How are you??');");";
string gb2312info = string.Empty;
การเข้ารหัส utf8 = การเข้ารหัส UTF8;
การเข้ารหัส gb2312 = Encoding.GetEncoding("gb2312");
// แปลงสตริงเป็นไบต์[]
ไบต์ [] unicodeBytes = utf8.GetBytes (utfinfo);
// ทำการแปลงจากการเข้ารหัสหนึ่งไปเป็นอีกการเข้ารหัสหนึ่ง
ไบต์ [] asciiBytes = การเข้ารหัส แปลง (utf8, gb2312, unicodeBytes);
// แปลงไบต์ใหม่[] ให้เป็นอักขระ [] แล้วแปลงเป็นสตริง
// นี่เป็นวิธีการแปลงที่แตกต่างกันเล็กน้อยเพื่อแสดงให้เห็น
// การใช้ GetCharCount/GetChars
ถ่าน [] asciiChars = ถ่านใหม่ [gb2312.GetCharCount (asciiBytes, 0, asciiBytes.Length)];
gb2312.GetChars(asciiBytes, 0, asciiBytes.Length, asciiChars, 0);
gb2312info = new string(asciiChars);
แน่นอนว่าการแปลงระหว่างการเข้ารหัสอื่นๆ นั้นคล้ายคลึงกับโค้ดด้านบนและจะไม่มีการอธิบาย