Ia adalah lebih rumit untuk penyemak imbas untuk mendapatkan pengekodan dokumen CSS daripada mendapatkan pengekodan dokumen HTML Tempat di mana ia boleh menetapkan pengekodan ialah medan jenis Kandungan ResponseHeader untuk menetapkan pengekodan atribut charset, dan dokumen CSS juga boleh ditetapkan, dan akhirnya dokumen pengekodan lalai.
Apakah kesan jika ralat pengekodan pengekodan dalam dokumen CSS adalah betul? Aksara Inggeris boleh dikenali secara normal, tetapi aksara Cina akan dipaparkan sebagai aksara bercelaru Ini terutamanya disebabkan oleh penggunaan fon Cina Fon Cina yang dipaparkan pada halaman adalah fon Inggeris (kandungan masih dalam bahasa Cina, maksud saya perubahan fon).
Menurut [1] spesifikasi CSS 2.1, pengekodan fail CSS luaran hendaklah ditentukan mengikut keutamaan berikut:
1. Pengekodan yang ditentukan oleh parameter "charset" medan "Content-Type" dalam pengepala respons HTTP.
2. BOM dan/atau pengekodan yang ditakrifkan oleh @charset.
3.<link charset="">
atau metadata lain yang disediakan oleh mekanisme pemautan (jika ada).
4. Perkenalkan pengekodan yang ditentukan dalam HTML fail CSS ini atau dalam fail CSS lain (jika ada).
5. Jika pengekodan tidak dapat ditentukan dalam langkah di atas, diandaikan bahawa pengekodan adalah UTF-8.
Hantar kaedah untuk mendapatkan pengekodan daripada 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; }