브라우저가 HTML 문서 인코딩을 얻는 것보다 CSS 문서 인코딩을 얻는 것이 훨씬 더 복잡합니다. 인코딩을 설정할 수 있는 곳은 ResponseHeader의 Content-type 필드로 인코딩을 설정할 수도 있습니다. charset 속성, CSS 문서 인코딩, 마지막으로 기본 인코딩 문서도 설정할 수 있습니다.
CSS 문서의 인코딩 인식 오류가 올바른 경우 어떤 영향을 미치나요? 영어 문자는 정상적으로 인식이 되지만 한자는 깨져서 표시됩니다. 이는 주로 중국어 글꼴을 사용했기 때문입니다. 페이지에 표시되는 중국어 글꼴은 영어 글꼴입니다(내용은 여전히 중국어로 표시됩니다. 글꼴 변경) .
[1] CSS 2.1 사양에 따르면 외부 CSS 파일의 인코딩은 다음 우선 순위에 따라 결정되어야 합니다.
1. HTTP 응답 헤더에 있는 "Content-Type" 필드의 "charset" 매개변수에 의해 지정된 인코딩입니다.
2. @charset으로 정의된 BOM 및/또는 인코딩.
3.<link charset="">
또는 연결 메커니즘에서 제공하는 기타 메타데이터(있는 경우).
4. 이 CSS 파일의 HTML 또는 다른 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; }