Il est beaucoup plus compliqué pour le navigateur d'obtenir l'encodage du document CSS que d'obtenir l'encodage du document HTML. L'endroit où il peut définir l'encodage est le champ Content-type de ResponseHeader pour définir l'encodage. L'attribut charset, et le document CSS peuvent également être définis, et enfin un document de codage par défaut.
Quel sera l'impact si le document CSS est mal encodé ? Les caractères anglais peuvent être reconnus normalement, mais les caractères chinois seront affichés sous forme de caractères tronqués. Cela est principalement dû à l'utilisation de polices chinoises. Les polices chinoises affichées sur la page sont des polices anglaises (le contenu est toujours en chinois, je veux dire celui affiché). changements de police) .
Selon la spécification [1] CSS 2.1, l'encodage d'un fichier CSS externe doit être déterminé selon les priorités suivantes :
1. L'encodage spécifié par le paramètre "charset" du champ "Content-Type" dans l'en-tête de réponse HTTP.
2. BOM et/ou encodage défini par @charset.
3.<link charset="">
ou d'autres métadonnées fournies par le mécanisme de liaison (le cas échéant).
4. Introduisez l'encodage déterminé dans le HTML de ce fichier CSS ou d'un autre fichier CSS (s'il en existe un).
5. Si le codage ne peut pas être déterminé au cours des étapes ci-dessus, on suppose que le codage est UTF-8.
Envoyez une méthode pour obtenir l'encodage de la nomenclature (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; }