Dit is baie meer ingewikkeld vir die blaaier om die CSS-dokumentkodering te bekom. Die plek waar dit die enkodering kan stel, is die Content-tipe veld van ResponseHeader om die enkodering te stel charset-kenmerk, en die CSS-dokument kan ook enkodering gestel word, en uiteindelik 'n verstekkoderingsdokument.
Wat sal die impak wees as die enkoderingsherkenningsfout in die CSS-dokument korrek is? Engelse karakters kan normaalweg herken word, maar Chinese karakters sal as verdraaide karakters vertoon word. Dit is hoofsaaklik as gevolg van die gebruik van Chinese lettertipes lettertipe veranderinge).
Volgens die [1] CSS 2.1-spesifikasie moet die enkodering van 'n eksterne CSS-lêer volgens die volgende prioriteite bepaal word:
1. Die enkodering gespesifiseer deur die "charset"-parameter van die "Content-Type"-veld in die HTTP-reaksie-opskrif.
2. BOM en/of enkodering gedefinieer deur @charset.
3.<link charset="">of ander metadata verskaf deur die skakelmeganisme (indien enige).
4. Stel die enkodering in wat bepaal word in die HTML van hierdie CSS-lêer of in 'n ander CSS-lêer (as daar een is).
5. Indien die enkodering nie in die bogenoemde stappe bepaal kan word nie, word aanvaar dat die enkodering UTF-8 is.
Stuur 'n metode om die enkodering vanaf die BOM (C#) te kry:
/// <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; }