Для браузера набагато складніше отримати кодування документа HTML. Місцем, де він може встановити кодування, є поле Content-type у ResponseHeader. Тег посилання також може встановити кодування атрибут набору символів, а також можна встановити кодування документа 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; }