Det er meget mere kompliceret for browseren at hente CSS-dokumentets kodning. Stedet, hvor den kan indstille kodningen, er Content-type-feltet i ResponseHeader for at indstille kodningen charset-attribut, og CSS-dokumentet kan også indstilles, og endelig et standardkodningsdokument.
Hvad vil virkningen være, hvis kodningsgenkendelsesfejlen i CSS-dokumentet er korrekt? Engelske tegn kan genkendes normalt, men kinesiske tegn vil blive vist som forvanskede tegn. Dette skyldes primært brugen af kinesiske skrifttyper. De kinesiske skrifttyper, der vises på siden, er engelske skrifttyper (indholdet er stadig på kinesisk, jeg mener de viste skrifttypeændringer).
I henhold til [1] CSS 2.1-specifikationen skal kodningen af en ekstern CSS-fil bestemmes i henhold til følgende prioriteter:
1. Den kodning, der er angivet af parameteren "charset" i feltet "Content-Type" i HTTP-svarets header.
2. Stykliste og/eller kodning defineret af @charset.
3.<link charset="">
eller andre metadata leveret af linkmekanismen (hvis nogen).
4. Introducer den kodning, der er bestemt i HTML-koden for denne CSS-fil eller en anden CSS-fil (hvis der er en).
5. Hvis kodningen ikke kan bestemmes i ovenstående trin, antages det, at kodningen er UTF-8.
Send en metode til at hente kodningen fra 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; }