يعد الحصول على ترميز مستند CSS أكثر تعقيدًا بالنسبة للمتصفح بدلاً من الحصول على ترميز مستند HTML. المكان الذي يمكن فيه تعيين الترميز هو حقل نوع المحتوى في ResponseHeader لتعيين الترميز يمكن أيضًا تعيين سمة مجموعة الأحرف، وترميز مستند CSS، وأخيرًا مستند ترميز افتراضي.
ما هو التأثير إذا تم ترميز مستند CSS بشكل غير صحيح؟ يمكن التعرف على الأحرف الإنجليزية بشكل طبيعي، ولكن سيتم عرض الأحرف الصينية كأحرف مشوهة ويرجع ذلك أساسًا إلى استخدام الخطوط الصينية المعروضة على الصفحة هي خطوط إنجليزية (لا يزال المحتوى باللغة الصينية، أعني الخطوط المعروضة). تغييرات الخط).
وفقًا لمواصفات [1] CSS 2.1، يجب تحديد تشفير ملف CSS خارجي وفقًا للأولويات التالية:
1. الترميز المحدد بواسطة معلمة "charset" لحقل "نوع المحتوى" في رأس استجابة 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; }