È molto più complicato per il browser ottenere la codifica del documento CSS che ottenere la codifica del documento HTML. Il posto in cui può impostare la codifica è il campo Content-type di ResponseHeader per impostare la codifica. Anche il tag link può impostare il file charset, è inoltre possibile impostare la codifica del documento CSS e infine un documento di codifica predefinito.
Quale sarà l'impatto se il documento CSS viene codificato in modo errato? I caratteri inglesi possono essere riconosciuti normalmente, ma i caratteri cinesi verranno visualizzati come caratteri confusi. Ciò è dovuto principalmente all'uso di caratteri cinesi. I caratteri cinesi visualizzati nella pagina sono caratteri inglesi (il contenuto è ancora in cinese, intendo i caratteri visualizzati modifiche ai caratteri).
Secondo la specifica [1] CSS 2.1, la codifica di un file CSS esterno dovrebbe essere determinata in base alle seguenti priorità:
1. La codifica specificata dal parametro "charset" del campo "Content-Type" nell'intestazione della risposta HTTP.
2. Distinta base e/o codifica definita da @charset.
3.<link charset="">
o altri metadati forniti dal meccanismo di collegamento (se presente).
4. Introduci la codifica determinata nell'HTML di questo file CSS o in un altro file CSS (se presente).
5. Se non è possibile determinare la codifica nei passaggi precedenti, si presuppone che la codifica sia UTF-8.
Invia un metodo per ottenere la codifica dalla distinta base (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; }