在一次解决编码的问题过程中,发现Encoding.GetEncoding("GB2312") == Encoding.GetEncoding("GBK"),
到底哪些字符串可以用在 Encoding.GetEncoding的方法中呢?
查看源代码后发现微软没有开放相关的接口,通过反射获取了所有的字符串。
private unsafe void Exec()
{
Assembly assembly = typeof(CultureInfo).Assembly;
Type encodingTableType = assembly.GetType("System.Globalization.EncodingTable");
StringBuilder sb = new StringBuilder();
int num = (int)encodingTableType.InvokeMember("lastEncodingItem",
BindingFlags.GetField | BindingFlags.Static | BindingFlags.NonPublic, null, null, new object[] { }
);
object encodingDataPtr = encodingTableType.InvokeMember("encodingDataPtr",
BindingFlags.GetField | BindingFlags.Static | BindingFlags.NonPublic, null, null, new object[] { }
);
Pointer ptr = (Pointer)encodingDataPtr;
InternalEncodingDataItem* pointer = (InternalEncodingDataItem*)Pointer.Unbox(ptr);
for (int i = 0; i <= num+1; i++)
{
InternalEncodingDataItem item = pointer[i];
ushort short1 = item.codePage;
string webName = new string(pointer[i].webName);
sb.AppendLine(pointer[i] .codePage.ToString()+ "----" + webName);
}
}
其中要定义一个struct,微软把结构信息也隐藏了。
internal struct InternalEncodingDataItem
{
[SecurityCritical]
internal unsafe sbyte* webName;
internal ushort codePage;
}
在我的电脑上,对应的关系如下:
codePage----webName
437----437
20127----ANSI_X3.4-1968
20127----ANSI_X3.4-1986
28596----arabic
20127----ascii
708----ASMO-708
950----Big5
950----Big5-HKSCS
858----CCSID00858
20924----CCSID00924
1140----CCSID01140
1141----CCSID01141
1142----CCSID01142
1143----CCSID01143
1144----CCSID01144
1145----CCSID01145
1146----CCSID01146
1147----CCSID01147
1148----CCSID01148
1149----CCSID01149
936----chinese
950----cn-big5
936----CN-GB
858----CP00858
20924----CP00924
1140----CP01140
1141----CP01141
1142----CP01142
1143----CP01143
1144----CP01144
1145----CP01145
1146----CP01146
1147----CP01147
1148----CP01148
1149----CP01149
37----cp037
21025----cp1025
1026----CP1026
1256----cp1256
20273----CP273
20278----CP278
20280----CP280
20284----CP284
20285----CP285
20290----cp290
20297----cp297
20127----cp367
20420----cp420
20423----cp423
20424----cp424
437----cp437
500----CP500
50227----cp50227
28591----cp819
850----cp850
852----cp852
855----cp855
857----cp857
858----cp858
860----cp860
861----cp861
862----cp862
863----cp863
864----cp864
865----cp865
866----cp866
869----cp869
870----CP870
20871----CP871
875----cp875
20880----cp880
20905----CP905
20127----csASCII
950----csbig5
51949----csEUCKR
51932----csEUCPkdFmtJapanese
936----csGB2312
936----csGB231280
37----csIBM037
1026----csIBM1026
20273----csIBM273
20277----csIBM277
20278----csIBM278
20280----csIBM280
20284----csIBM284
20285----csIBM285
20290----csIBM290
20297----csIBM297
20420----csIBM420
20423----csIBM423
20424----csIBM424
500----csIBM500
870----csIBM870
20871----csIBM871
20880----csIBM880
20905----csIBM905
20838----csIBMThai
50221----csISO2022JP
50225----csISO2022KR
936----csISO58GB231280
28591----csISOLatin1
28592----csISOLatin2
28593----csISOLatin3
28594----csISOLatin4
28599----csISOLatin5
28605----csISOLatin9
28596----csISOLatinArabic
28595----csISOLatinCyrillic
28597----csISOLatinGreek
28598----csISOLatinHebrew
20866----csKOI8R
949----csKSC56011987
437----csPC8CodePage437
932----csShiftJIS
65000----csUnicode11UTF7
932----csWindows31J
28595----cyrillic
20106----DIN_66003
720----DOS-720
862----DOS-862
874----DOS-874
20420----ebcdic-cp-ar1
500----ebcdic-cp-be
37----ebcdic-cp-ca
500----ebcdic-cp-ch
20277----EBCDIC-CP-DK
20284----ebcdic-cp-es
20278----ebcdic-cp-fi
20297----ebcdic-cp-fr
20285----ebcdic-cp-gb
20423----ebcdic-cp-gr
20424----ebcdic-cp-he
20871----ebcdic-cp-is
20280----ebcdic-cp-it
37----ebcdic-cp-nl
20277----EBCDIC-CP-NO
870----ebcdic-cp-roece
20278----ebcdic-cp-se
20905----ebcdic-cp-tr
37----ebcdic-cp-us
37----ebcdic-cp-wt
870----ebcdic-cp-yu
20880----EBCDIC-Cyrillic
1141----ebcdic-de-273+euro
1142----ebcdic-dk-277+euro
1145----ebcdic-es-284+euro
1143----ebcdic-fi-278+euro
1147----ebcdic-fr-297+euro
1146----ebcdic-gb-285+euro
1148----ebcdic-international-500+euro
1149----ebcdic-is-871+euro
1144----ebcdic-it-280+euro
20290----EBCDIC-JP-kana
20924----ebcdic-Latin9--euro
1142----ebcdic-no-277+euro
1143----ebcdic-se-278+euro
1140----ebcdic-us-37+euro
28596----ECMA-114
28597----ECMA-118
28597----ELOT_928
51936----euc-cn
51932----euc-jp
51949----euc-kr
51932----Extended_UNIX_Code_Packed_Format_for_Japanese
54936----GB18030
936----GB2312
936----GB2312-80
936----GB231280
936----GBK
936----GB_2312-80
20106----German
28597----greek
28597----greek8
28598----hebrew
52936----hz-gb-2312
20838----IBM-Thai
858----IBM00858
20924----IBM00924
1047----IBM01047
1140----IBM01140
1141----IBM01141
1142----IBM01142
1143----IBM01143
1144----IBM01144
1145----IBM01145
1146----IBM01146
1147----IBM01147
1148----IBM01148
1149----IBM01149
37----IBM037
1026----IBM1026
20273----IBM273
20277----IBM277
20278----IBM278
20280----IBM280
20284----IBM284
20285----IBM285
20290----IBM290
20297----IBM297
20127----IBM367
20420----IBM420
20423----IBM423
20424----IBM424
437----IBM437
500----IBM500
737----ibm737
775----ibm775
28591----ibm819
850----IBM850
852----IBM852
855----IBM855
857----IBM857
860----IBM860
861----IBM861
862----IBM862
863----IBM863
864----IBM864
865----IBM865
866----IBM866
869----IBM869
870----IBM870
20871----IBM871
20880----IBM880
20905----IBM905
20105----irv
1200----ISO-10646-UCS-2
50220----iso-2022-jp
51932----iso-2022-jpeuc
50225----iso-2022-kr
50225----iso-2022-kr-7
50225----iso-2022-kr-7bit
51949----iso-2022-kr-8
51949----iso-2022-kr-8bit
28591----iso-8859-1
874----iso-8859-11
28603----iso-8859-13
28605----iso-8859-15
28592----iso-8859-2
28593----iso-8859-3
28594----iso-8859-4
28595----iso-8859-5
28596----iso-8859-6
28597----iso-8859-7
28598----iso-8859-8
28598----ISO-8859-8 Visual
38598----iso-8859-8-i
28599----iso-8859-9
28591----iso-ir-100
28592----iso-ir-101
28593----iso-ir-109
28594----iso-ir-110
28597----iso-ir-126
28596----iso-ir-127
28598----iso-ir-138
28595----iso-ir-144
28599----iso-ir-148
949----iso-ir-149
936----iso-ir-58
20127----iso-ir-6
20127----ISO646-US
28591----iso8859-1
28592----iso8859-2
20127----ISO_646.irv:1991
28591----iso_8859-1
28605----ISO_8859-15
28591----iso_8859-1:1987
28592----iso_8859-2
28592----iso_8859-2:1987
28593----ISO_8859-3
28593----ISO_8859-3:1988
28594----ISO_8859-4
28594----ISO_8859-4:1988
28595----ISO_8859-5
28595----ISO_8859-5:1988
28596----ISO_8859-6
28596----ISO_8859-6:1987
28597----ISO_8859-7
28597----ISO_8859-7:1987
28598----ISO_8859-8
28598----ISO_8859-8:1988
28599----ISO_8859-9
28599----ISO_8859-9:1989
1361----Johab
20866----koi
20866----koi8
20866----koi8-r
21866----koi8-ru
21866----koi8-u
20866----koi8r
949----korean
949----ks-c-5601
949----ks-c5601
949----KSC5601
949----KSC_5601
949----ks_c_5601
949----ks_c_5601-1987
949----ks_c_5601-1989
949----ks_c_5601_1987
28591----l1
28592----l2
28593----l3
28594----l4
28599----l5
28605----l9
28591----latin1
28592----latin2
28593----latin3
28594----latin4
28599----latin5
28605----latin9
28598----logical
10000----macintosh
932----ms_Kanji
20108----Norwegian
20108----NS_4551-1
858----PC-Multilingual-850+euro
20107----SEN_850200_B
932----shift-jis
932----shift_jis
932----sjis
20107----Swedish
874----TIS-620
1200----ucs-2
1200----unicode
65000----unicode-1-1-utf-7
65001----unicode-1-1-utf-8
65000----unicode-2-0-utf-7
65001----unicode-2-0-utf-8
1201----unicodeFFFE
20127----us
20127----us-ascii
1200----utf-16
1201----UTF-16BE
1200----UTF-16LE
12000----utf-32
12001----UTF-32BE
12000----UTF-32LE
65000----utf-7
65001----utf-8
28598----visual
1250----windows-1250
1251----windows-1251
1252----windows-1252
1253----windows-1253
1254----Windows-1254
1255----windows-1255
1256----windows-1256
1257----windows-1257
1258----windows-1258
874----windows-874
1252----x-ansi
20000----x-Chinese-CNS
20002----x-Chinese-Eten
1250----x-cp1250
1251----x-cp1251
20001----x-cp20001
20003----x-cp20003
20004----x-cp20004
20005----x-cp20005
20261----x-cp20261
20269----x-cp20269
20936----x-cp20936
20949----x-cp20949
50227----x-cp50227
20833----X-EBCDIC-KoreanExtended
51932----x-euc
51936----x-euc-cn
51932----x-euc-jp
29001----x-Europa
20105----x-IA5
20106----x-IA5-German
20108----x-IA5-Norwegian
20107----x-IA5-Swedish
57006----x-iscii-as
57003----x-iscii-be
57002----x-iscii-de
57010----x-iscii-gu
57008----x-iscii-ka
57009----x-iscii-ma
57007----x-iscii-or
57011----x-iscii-pa
57004----x-iscii-ta
57005----x-iscii-te
10004----x-mac-arabic
10029----x-mac-ce
10008----x-mac-chinesesimp
10002----x-mac-chinesetrad
10082----x-mac-croatian
10007----x-mac-cyrillic
10006----x-mac-greek
10005----x-mac-hebrew
10079----x-mac-icelandic
10001----x-mac-japanese
10003----x-mac-korean
10010----x-mac-romanian
10021----x-mac-thai
10081----x-mac-turkish
10017----x-mac-ukrainian
932----x-ms-cp932
932----x-sjis
65000----x-unicode-1-1-utf-7
65001----x-unicode-1-1-utf-8
65000----x-unicode-2-0-utf-7
65001----x-unicode-2-0-utf-8
950----x-x-big5