HTML document encoding ကိုရယူခြင်းထက် CSS document encoding ကိုရယူရန် browser သည် encoding ကိုသတ်မှတ်နိုင်သည့်နေရာသည် encoding ကိုသတ်မှတ်ရန် ResponseHeader ၏အကြောင်းအရာအမျိုးအစားအကွက်ဖြစ်ပြီး link tag ကိုလည်းသတ်မှတ်နိုင်သည်။ Charset attribute နှင့် CSS document ကို ကုဒ်သွင်းခြင်း နှင့် နောက်ဆုံးတွင် ပုံသေ ကုဒ်ပြောင်းခြင်း စာရွက်စာတမ်းကို သတ်မှတ်နိုင်သည်။
CSS စာရွက်စာတမ်းရှိ ကုဒ်နံပါတ်အသိအမှတ်ပြုမှု အမှားသည် မှန်ကန်ပါက မည်သို့အကျိုးသက်ရောက်နိုင်မည်နည်း။ အင်္ဂလိပ်အက္ခရာများကို ပုံမှန်အားဖြင့် မှတ်မိနိုင်သော်လည်း တရုတ်စာလုံးများကို ဗလုံးဗထွေးအက္ခရာများအဖြစ် ပြသသွားမည်ဖြစ်ပြီး ယင်းမှာ အဓိကအားဖြင့် တရုတ်ဖောင့်များကို အသုံးပြုခြင်းကြောင့် စာမျက်နှာတွင် ပြသထားသည့် တရုတ်ဖောင့်များသည် အင်္ဂလိပ်ဖောင့်များဖြစ်သည် (အကြောင်းအရာသည် တရုတ်ဘာသာဖြင့်သာ ပြသထားခြင်းဖြစ်သည်။ ဖောင့်အပြောင်းအလဲများ)။
[1] CSS 2.1 သတ်မှတ်ချက်အရ၊ ပြင်ပ CSS ဖိုင်တစ်ခု၏ ကုဒ်သွင်းခြင်းကို အောက်ပါဦးစားပေးများအလိုက် ဆုံးဖြတ်သင့်သည်-
1. HTTP တုံ့ပြန်မှုခေါင်းစီးရှိ "အကြောင်းအရာ-အမျိုးအစား" အကွက်၏ "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; }