Það er miklu flóknara fyrir vafrann að fá CSS skjalkóðun en að fá HTML skjalkóðun charset eigind, og CSS skjalið er einnig hægt að stilla, og að lokum sjálfgefið kóðun skjal.
Hver verða áhrifin ef kóðungreiningarvillan í CSS skjalinu er rétt? Venjulega er hægt að bera kennsl á enska stafi, en kínversk stafi birtast sem brengluð stafi Þetta er aðallega vegna notkunar á kínverskum leturgerðum leturbreytingar).
Samkvæmt [1] CSS 2.1 forskriftinni ætti að ákvarða kóðun ytri CSS skráar í samræmi við eftirfarandi forgangsröðun:
1. Kóðunin sem tilgreind er með „stafsetu“ færibreytunni í „Content-Type“ reitnum í HTTP svarhaus.
2. BOM og/eða kóðun skilgreind af @charset.
3.<link charset="">
eða önnur lýsigögn sem tengingarbúnaðurinn veitir (ef einhver er).
4. Kynntu kóðunina sem ákveðin er í HTML þessarar CSS skráar eða annarrar CSS skráar (ef hún er til).
5. Ef ekki er hægt að ákvarða kóðun í ofangreindum skrefum er gert ráð fyrir að kóðun sé UTF-8.
Sendu aðferð til að fá kóðun frá 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; }