เบราว์เซอร์จะได้รับการเข้ารหัสเอกสาร CSS มากกว่าการรับการเข้ารหัสเอกสาร HTML ตำแหน่งที่สามารถตั้งค่าการเข้ารหัสคือฟิลด์ประเภทเนื้อหาของ ResponseHeader เพื่อตั้งค่าการเข้ารหัส แอตทริบิวต์ชุดอักขระและเอกสาร CSS ก็สามารถตั้งค่าได้และในที่สุดก็เป็นเอกสารการเข้ารหัสเริ่มต้น
จะมีผลกระทบอย่างไรหากข้อผิดพลาดการรู้จำการเข้ารหัสในเอกสาร CSS ถูกต้อง ตัวอักษรภาษาอังกฤษสามารถรับรู้ได้ตามปกติแต่ตัวอักษรจีนจะแสดงเป็นตัวอักษรที่อ่านไม่ออกสาเหตุหลักมาจากการใช้แบบอักษรจีนที่แสดงบนหน้าเป็นแบบอักษรภาษาอังกฤษ (เนื้อหายังคงเป็นภาษาจีนฉันหมายถึงการแสดง) การเปลี่ยนแปลงแบบอักษร)
ตามข้อกำหนด [1] CSS 2.1 การเข้ารหัสไฟล์ CSS ภายนอกควรถูกกำหนดตามลำดับความสำคัญต่อไปนี้:
1. การเข้ารหัสที่ระบุโดยพารามิเตอร์ "charset" ของฟิลด์ "Content-Type" ในส่วนหัวการตอบกลับ HTTP
2. BOM และ/หรือการเข้ารหัสที่กำหนดโดย @charset
3.<link charset="">
หรือข้อมูลเมตาอื่น ๆ ที่ได้รับจากกลไกการเชื่อมโยง (ถ้ามี)
4. แนะนำการเข้ารหัสที่กำหนดใน HTML ของไฟล์ CSS นี้หรือในไฟล์ CSS อื่น (ถ้ามี)
5. หากไม่สามารถกำหนดการเข้ารหัสได้ในขั้นตอนข้างต้น จะถือว่าการเข้ารหัสนั้นเป็น UTF-8
ส่งวิธีการรับการเข้ารหัสจาก BOM (C#):
/// <summary> /// 从字节流判断编码(返回null是不能判断出编码) /// </summary> /// <param name="bt">输入字节流</param> /// <returns></returns> internal static string GetEncodingByByte(byte[] bt) { //带BOM的utf-8 var utf8 = new byte[] { 0xEF, 0xBB, 0xBF }; if (bt[0] == utf8[0] && bt[1] == utf8[1] && bt[2] == utf8[2]) { return "utf-8"; } //UTF-32-BE var utf32Be = new byte[] { 0x00, 0x00, 0xFE, 0xFF }; if (bt[0] == utf32Be[0] && bt[1] == utf32Be[1] && bt[2] == utf32Be[2] && bt[3] == utf32Be[3]) { return "utf-32"; } //UTF-32-LE var utf32Le = new byte[] { 0xFF, 0xFE, 0x00, 0x00 }; if (bt[0] == utf32Le[0] && bt[1] == utf32Le[1] && bt[2] == utf32Le[2] && bt[3] == utf32Le[3]) { return "utf-32"; } //UTF-32-2143 var utf322143 = new byte[] { 0x00, 0x00, 0xFF, 0xFE }; if (bt[0] == utf322143[0] && bt[1] == utf322143[1] && bt[2] == utf322143[2] && bt[3] == utf322143[3]) { return "utf-32"; } //UTF-32-3412 var utf323412 = new byte[] { 0xFE, 0xFF, 0x00, 0x00 }; if (bt[0] == utf323412[0] && bt[1] == utf323412[1] && bt[2] == utf323412[2] && bt[3] == utf323412[3]) { return "utf-32"; } //UTF-16-BE var utf16Be = new byte[] { 0xFE, 0xFF }; if (bt[0] == utf16Be[0] && bt[1] == utf16Be[1]) { return "utf-16"; } //UTF-16-LE var utf16Le = new byte[] { 0xFF, 0xFE }; if (bt[0] == utf16Le[0] && bt[1] == utf16Le[1]) { return "utf-16"; } return null; }