Pre prehliadač je oveľa zložitejšie získať kódovanie dokumentu CSS ako získať kódovanie dokumentu HTML. Miesto, kde môže nastaviť kódovanie, je pole Content-type v ResponseHeader na nastavenie kódovania charset a možno nastaviť aj kódovanie CSS dokumentu a nakoniec predvolený kódovací dokument.
Aký to bude mať vplyv, ak bude css dokument zakódovaný nesprávne? Anglické znaky sa dajú normálne rozpoznať, ale čínske znaky sa zobrazia ako skomolené znaky. Dôvodom je najmä použitie čínskych fontov na stránke sú anglické fonty (obsah je stále v čínštine, myslím zobrazené zmeny písma).
Podľa špecifikácie [1] CSS 2.1 by sa kódovanie externého súboru CSS malo určiť podľa nasledujúcich priorít:
1. Kódovanie špecifikované parametrom „charset“ v poli „Content-Type“ v hlavičke odpovede HTTP.
2. Kusovník a/alebo kódovanie definované pomocou @charset.
3.<link charset="">
alebo iné metadáta poskytnuté mechanizmom prepojenia (ak existujú).
4. Zaveďte kódovanie určené v HTML tohto súboru CSS alebo v inom súbore CSS (ak existuje).
5. Ak nie je možné určiť kódovanie vo vyššie uvedených krokoch, predpokladá sa, že kódovanie je UTF-8.
Pošlite metódu na získanie kódovania z kusovníka (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; }