Det är mycket mer komplicerat för webbläsaren att skaffa CSS-dokumentets kodning. Platsen där den kan ställa in kodningen är Content-type-fältet i ResponseHeader för att ställa in kodningen charset-attribut och CSS-dokumentet kan också ställas in, och slutligen ett standardkodningsdokument.
Vad blir effekten om css-dokumentet är felkodat? Engelska tecken kan kännas igen normalt, men kinesiska tecken kommer att visas som förvrängda tecken. Detta beror främst på användningen av kinesiska teckensnitt. De kinesiska teckensnitten som visas på sidan är engelska teckensnitt (innehållet är fortfarande på kinesiska, jag menar det som visas teckensnittsändringar).
Enligt [1] CSS 2.1-specifikationen bör kodningen av en extern CSS-fil bestämmas enligt följande prioriteringar:
1. Kodningen som anges av parametern "charset" i fältet "Content-Type" i HTTP-svarshuvudet.
2. BOM och/eller kodning definierad av @charset.
3.<link charset="">
eller annan metadata som tillhandahålls av länkmekanismen (om någon).
4. Introducera kodningen som bestäms i HTML-koden för denna CSS-fil eller i en annan CSS-fil (om det finns en).
5. Om kodningen inte kan bestämmas i ovanstående steg, antas det att kodningen är UTF-8.
Skicka en metod för att hämta kodningen från 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; }