Mas kumplikado para sa browser na makuha ang pag-encode ng dokumento ng CSS kaysa sa pagkuha ng pag-encode ng HTML na dokumento charset attribute, at ang CSS na dokumento ay maaari ding itakda, at sa wakas ay isang default na dokumento sa pag-encode.
Ano ang magiging epekto kung mali ang pagkaka-encode ng css document? Ang mga character na Ingles ay maaaring makilala nang normal, ngunit ang mga character na Tsino ay ipapakita bilang mga magulo na character Ito ay higit sa lahat dahil sa paggamit ng mga Chinese na font Ang mga Chinese na font na ipinapakita sa pahina ay mga English na font (ang nilalaman ay nasa Chinese pa rin, ang ibig kong sabihin ay ang ipinapakita pagbabago ng font).
Ayon sa [1] CSS 2.1 na detalye, ang pag-encode ng isang panlabas na CSS file ay dapat matukoy ayon sa mga sumusunod na priyoridad:
1. Ang pag-encode na tinukoy ng "charset" na parameter ng field na "Content-Type" sa header ng tugon ng HTTP.
2. BOM at/o pag-encode na tinukoy ng @charset.
3.<link charset="">
o iba pang metadata na ibinigay ng mekanismo ng pag-link (kung mayroon man).
4. Ipakilala ang encoding na tinutukoy sa HTML ng CSS file na ito o sa isa pang CSS file (kung mayroon man).
5. Kung hindi matukoy ang pag-encode sa mga hakbang sa itaas, ipinapalagay na ang pag-encode ay UTF-8.
Magpadala ng paraan para makuha ang encoding mula sa 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; }