Es mucho más complicado para el navegador obtener la codificación del documento CSS que obtener la codificación del documento HTML. El lugar donde puede configurar la codificación es el campo de tipo de contenido de ResponseHeader para configurar la codificación. atributo charset y también se puede configurar la codificación del documento CSS y, finalmente, un documento de codificación predeterminado.
¿Cuál será el impacto si el error de reconocimiento de codificación en el documento CSS es correcto? Los caracteres en inglés se pueden reconocer normalmente, pero los caracteres chinos se mostrarán como caracteres confusos. Esto se debe principalmente al uso de fuentes chinas. Las fuentes chinas que se muestran en la página son fuentes en inglés (el contenido todavía está en chino, me refiero a las que se muestran). cambios de fuente).
Según la especificación [1] CSS 2.1, la codificación de un archivo CSS externo debe determinarse de acuerdo con las siguientes prioridades:
1. La codificación especificada por el parámetro "charset" del campo "Tipo de contenido" en el encabezado de respuesta HTTP.
2. BOM y/o codificación definida por @charset.
3.<link charset="">
u otros metadatos proporcionados por el mecanismo de enlace (si corresponde).
4. Introducir la codificación determinada en el HTML de este archivo CSS o en otro archivo CSS (si lo hay).
5. Si no se puede determinar la codificación en los pasos anteriores, se supone que la codificación es UTF-8.
Envíe un método para obtener la codificación de la lista de materiales (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; }