За браузъра е много по-сложно да получи кодирането на HTML документа. Мястото, където може да зададе кодирането, е полето Content-type на ResponseHeader, за да зададе кодирането charset атрибут и CSS документът също може да бъде зададен кодиране и накрая документ за кодиране по подразбиране.
Какво ще бъде въздействието, ако css документът е кодиран неправилно? Английските символи могат да бъдат разпознати нормално, но китайските символи ще се показват като изкривени. Това се дължи главно на използването на китайски шрифтове, показани на страницата, са английски шрифтове (съдържанието все още е на китайски, имам предвид показаното промени в шрифта).
Съгласно спецификацията [1] CSS 2.1, кодирането на външен CSS файл трябва да се определя според следните приоритети:
1. Кодирането, посочено от параметъра "charset" на полето "Content-Type" в заглавката на HTTP отговора.
2. BOM и/или кодиране, определени от @charset.
3.<link charset="">
или други метаданни, предоставени от механизма за свързване (ако има такъв).
4. Въведете кодирането, определено в HTML на този CSS файл или в друг CSS файл (ако има такъв).
5. Ако кодирането не може да бъде определено в горните стъпки, се приема, че кодирането е UTF-8.
Изпратете метод за получаване на кодирането от 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; }