Et ass vill méi komplizéiert fir de Browser d'CSS Dokument Kodéierung ze kréien wéi d'HTML Dokument Kodéierung ze kréien Charset Attribut, an d'CSS Dokument kann och gesat ginn, a schliisslech e Standard Kodéierungsdokument.
Wat wäert den Impakt sinn wann de Kodéierungserkennungsfehler am CSS Dokument richteg ass? Englesch Zeeche kënnen normalerweis erkannt ginn, awer Chinesesch Zeechen ginn als verwinnte Charaktere ugewisen Schrëft Ännerungen).
No der [1] CSS 2.1 Spezifizéierung, soll d'Kodéierung vun enger externer CSS Datei no de folgende Prioritéite bestëmmt ginn:
1. D'Kodéierung spezifizéiert vum "Charset" Parameter vum "Content-Type" Feld am HTTP Äntwert Header.
2. BOM an / oder Kodéierung definéiert vun @charset.
3.<link charset="">
oder aner Metadaten, déi vum Verknëppungsmechanismus geliwwert ginn (wann iwwerhaapt).
4. Gitt d'Kodéierung an der HTML vun dëser CSS-Datei oder an enger anerer CSS-Datei fest (wann et een ass).
5. Wann d'Kodéierung net an den uewe genannte Schrëtt bestëmmt ka ginn, gëtt ugeholl datt d'Kodéierung UTF-8 ass.
Schéckt eng Method fir d'Kodéierung vu BOM (C#) ze kréien:
/// <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; }