Terraria v1.4.4.9
Terraria source code documentation
Loading...
Searching...
No Matches
EncodingTable.cs
Go to the documentation of this file.
3
4namespace System.Text;
5
6internal static class EncodingTable
7{
9
11
13
14 private static readonly ReaderWriterLockSlim s_cacheLock = new ReaderWriterLockSlim();
15
16 private static readonly int[] s_encodingNameIndices = new int[365]
17 {
18 0, 3, 9, 17, 21, 31, 41, 51, 61, 71,
19 81, 91, 101, 111, 121, 131, 141, 151, 158, 165,
20 170, 177, 184, 191, 198, 205, 212, 219, 226, 233,
21 240, 247, 254, 259, 265, 271, 277, 283, 288, 293,
22 298, 303, 308, 313, 318, 323, 328, 333, 338, 343,
23 350, 355, 360, 365, 370, 375, 380, 385, 390, 395,
24 400, 405, 410, 415, 420, 425, 430, 435, 440, 446,
25 453, 472, 480, 490, 498, 507, 515, 523, 531, 539,
26 547, 555, 563, 571, 579, 587, 595, 603, 611, 619,
27 627, 635, 644, 655, 666, 681, 692, 703, 714, 725,
28 736, 752, 770, 785, 801, 808, 821, 837, 847, 859,
29 867, 876, 883, 890, 897, 910, 922, 934, 946, 958,
30 970, 982, 994, 1006, 1018, 1030, 1042, 1054, 1066, 1078,
31 1093, 1105, 1117, 1129, 1141, 1153, 1168, 1186, 1204, 1222,
32 1240, 1258, 1276, 1305, 1323, 1341, 1355, 1374, 1392, 1410,
33 1427, 1435, 1443, 1451, 1457, 1463, 1469, 1514, 1521, 1527,
34 1536, 1544, 1554, 1557, 1563, 1568, 1574, 1580, 1590, 1598,
35 1606, 1614, 1622, 1630, 1638, 1646, 1654, 1662, 1670, 1678,
36 1686, 1694, 1702, 1708, 1715, 1721, 1727, 1733, 1739, 1745,
37 1751, 1757, 1763, 1769, 1775, 1781, 1787, 1793, 1799, 1805,
38 1811, 1817, 1823, 1829, 1835, 1841, 1847, 1853, 1859, 1865,
39 1871, 1877, 1883, 1889, 1895, 1901, 1904, 1915, 1929, 1940,
40 1953, 1969, 1982, 1998, 2009, 2020, 2031, 2041, 2051, 2061,
41 2071, 2081, 2091, 2101, 2118, 2130, 2140, 2150, 2160, 2170,
42 2180, 2190, 2200, 2210, 2220, 2230, 2239, 2248, 2259, 2269,
43 2284, 2294, 2309, 2319, 2334, 2344, 2359, 2369, 2384, 2394,
44 2409, 2419, 2434, 2444, 2459, 2464, 2467, 2471, 2477, 2484,
45 2490, 2495, 2501, 2510, 2518, 2527, 2541, 2555, 2569, 2576,
46 2584, 2586, 2588, 2590, 2592, 2594, 2600, 2606, 2612, 2618,
47 2624, 2631, 2640, 2648, 2657, 2666, 2690, 2702, 2711, 2720,
48 2724, 2731, 2738, 2744, 2756, 2768, 2780, 2792, 2804, 2816,
49 2828, 2840, 2852, 2863, 2869, 2882, 2896, 2904, 2912, 2921,
50 2930, 2939, 2948, 2957, 2966, 2975, 2984, 2993, 3016, 3021,
51 3029, 3037, 3045, 3050, 3062, 3077, 3090, 3100, 3110, 3120,
52 3130, 3140, 3150, 3160, 3170, 3180, 3190, 3202, 3210, 3227,
53 3244, 3258, 3272, 3283, 3295, 3310, 3324, 3336, 3350, 3360,
54 3373, 3388, 3398, 3404, 3412
55 };
56
57 private static readonly ushort[] s_codePagesByName = new ushort[364]
58 {
59 437, 28596, 708, 950, 950, 858, 20924, 1140, 1141, 1142,
60 1143, 1144, 1145, 1146, 1147, 1148, 1149, 936, 950, 936,
61 858, 20924, 1140, 1141, 1142, 1143, 1144, 1145, 1146, 1147,
62 1148, 1149, 37, 21025, 1026, 1252, 1256, 20273, 20278, 20280,
63 20284, 20285, 20290, 20297, 20420, 20423, 20424, 437, 500, 50227,
64 850, 852, 855, 857, 858, 860, 861, 862, 863, 864,
65 865, 866, 869, 870, 20871, 875, 20880, 20905, 950, 51949,
66 51932, 936, 936, 37, 1026, 20273, 20277, 20278, 20280, 20284,
67 20285, 20290, 20297, 20420, 20423, 20424, 500, 870, 20871, 20880,
68 20905, 20838, 50221, 50225, 936, 28592, 28593, 28594, 28599, 28605,
69 28596, 28595, 28597, 28598, 20866, 949, 437, 932, 932, 28595,
70 20106, 720, 862, 874, 20420, 500, 37, 500, 20277, 20284,
71 20278, 20297, 20285, 20423, 20424, 20871, 20280, 37, 20277, 870,
72 20278, 20905, 37, 37, 870, 20880, 1141, 1142, 1145, 1143,
73 1147, 1146, 1148, 1149, 1144, 20290, 20924, 1142, 1143, 1140,
74 28596, 28597, 28597, 51936, 51932, 51949, 51932, 54936, 936, 936,
75 936, 936, 936, 20106, 28597, 28597, 28598, 52936, 20838, 858,
76 20924, 1047, 1140, 1141, 1142, 1143, 1144, 1145, 1146, 1147,
77 1148, 1149, 37, 1026, 20273, 20277, 20278, 20280, 20284, 20285,
78 20290, 20297, 20420, 20423, 20424, 437, 500, 737, 775, 850,
79 852, 855, 857, 860, 861, 862, 863, 864, 865, 866,
80 869, 870, 20871, 20880, 20905, 20105, 50220, 51932, 50225, 50225,
81 50225, 51949, 51949, 874, 28603, 28605, 28592, 28593, 28594, 28595,
82 28596, 28597, 28598, 28598, 38598, 28599, 28592, 28593, 28594, 28597,
83 28596, 28598, 28595, 28599, 949, 936, 28592, 28605, 28592, 28592,
84 28593, 28593, 28594, 28594, 28595, 28595, 28596, 28596, 28597, 28597,
85 28598, 28598, 28599, 28599, 1361, 20866, 20866, 20866, 21866, 21866,
86 20866, 949, 949, 949, 949, 949, 949, 949, 949, 949,
87 28592, 28593, 28594, 28599, 28605, 28592, 28593, 28594, 28599, 28605,
88 28598, 10000, 932, 20108, 20108, 858, 20107, 932, 932, 932,
89 20107, 874, 28598, 1250, 1251, 1252, 1253, 1254, 1255, 1256,
90 1257, 1258, 874, 1252, 20000, 20002, 1250, 1251, 20001, 20003,
91 20004, 20005, 20261, 20269, 20936, 20949, 50227, 20833, 51932, 51936,
92 51932, 29001, 20105, 20106, 20108, 20107, 57006, 57003, 57002, 57010,
93 57008, 57009, 57007, 57011, 57004, 57005, 10004, 10029, 10008, 10002,
94 10082, 10007, 10006, 10005, 10079, 10001, 10003, 10010, 10021, 10081,
95 10017, 932, 932, 950
96 };
97
98 private static readonly ushort[] s_mappedCodePages = new ushort[132]
99 {
100 37, 437, 500, 708, 720, 737, 775, 850, 852, 855,
101 857, 858, 860, 861, 862, 863, 864, 865, 866, 869,
102 870, 874, 875, 932, 936, 949, 950, 1026, 1047, 1140,
103 1141, 1142, 1143, 1144, 1145, 1146, 1147, 1148, 1149, 1250,
104 1251, 1252, 1253, 1254, 1255, 1256, 1257, 1258, 1361, 10000,
105 10001, 10002, 10003, 10004, 10005, 10006, 10007, 10008, 10010, 10017,
106 10021, 10029, 10079, 10081, 10082, 20000, 20001, 20002, 20003, 20004,
107 20005, 20105, 20106, 20107, 20108, 20261, 20269, 20273, 20277, 20278,
108 20280, 20284, 20285, 20290, 20297, 20420, 20423, 20424, 20833, 20838,
109 20866, 20871, 20880, 20905, 20924, 20932, 20936, 20949, 21025, 21866,
110 28592, 28593, 28594, 28595, 28596, 28597, 28598, 28599, 28603, 28605,
111 29001, 38598, 50220, 50221, 50222, 50225, 50227, 51932, 51936, 51949,
112 52936, 54936, 57002, 57003, 57004, 57005, 57006, 57007, 57008, 57009,
113 57010, 57011
114 };
115
116 private static readonly int[] s_webNameIndices = new int[133]
117 {
118 0, 6, 12, 18, 26, 33, 39, 45, 51, 57,
119 63, 69, 77, 83, 89, 96, 102, 108, 114, 119,
120 125, 131, 142, 147, 156, 162, 176, 180, 187, 195,
121 203, 211, 219, 227, 235, 243, 251, 259, 267, 275,
122 287, 299, 311, 323, 335, 347, 359, 371, 383, 388,
123 397, 411, 428, 440, 452, 464, 475, 489, 506, 520,
124 535, 545, 553, 568, 581, 595, 608, 617, 631, 640,
125 649, 658, 663, 675, 688, 703, 712, 721, 727, 733,
126 739, 745, 751, 757, 763, 769, 775, 781, 787, 810,
127 818, 824, 830, 836, 842, 850, 856, 865, 874, 880,
128 886, 896, 906, 916, 926, 936, 946, 956, 966, 977,
129 988, 996, 1008, 1019, 1030, 1041, 1052, 1061, 1067, 1073,
130 1079, 1089, 1096, 1106, 1116, 1126, 1136, 1146, 1156, 1166,
131 1176, 1186, 1196
132 };
133
134 private static readonly int[] s_englishNameIndices = new int[133]
135 {
136 0, 22, 39, 65, 82, 94, 105, 117, 139, 161,
137 173, 186, 210, 226, 241, 253, 274, 286, 298, 312,
138 331, 364, 378, 403, 423, 450, 456, 482, 510, 521,
139 548, 573, 605, 637, 660, 683, 703, 727, 758, 785,
140 811, 829, 855, 870, 887, 903, 919, 935, 955, 969,
141 991, 1005, 1030, 1042, 1054, 1066, 1077, 1091, 1115, 1129,
142 1144, 1154, 1176, 1191, 1204, 1218, 1243, 1253, 1279, 1293,
143 1308, 1319, 1341, 1353, 1366, 1381, 1385, 1393, 1413, 1440,
144 1467, 1485, 1503, 1518, 1548, 1567, 1586, 1604, 1623, 1651,
145 1668, 1685, 1707, 1736, 1756, 1767, 1805, 1835, 1849, 1888,
146 1905, 1927, 1940, 1952, 1966, 1978, 1989, 2008, 2021, 2035,
147 2048, 2054, 2074, 2088, 2120, 2160, 2172, 2201, 2215, 2239,
148 2251, 2274, 2302, 2318, 2331, 2342, 2354, 2368, 2379, 2392,
149 2407, 2421, 2434
150 };
151
152 internal static int GetCodePageFromName(string name)
153 {
154 if (name == null)
155 {
156 return 0;
157 }
158 s_cacheLock.EnterUpgradeableReadLock();
159 try
160 {
161 if (s_nameToCodePageCache.TryGetValue(name, out var value))
162 {
163 return value;
164 }
166 if (value == 0)
167 {
168 return 0;
169 }
170 s_cacheLock.EnterWriteLock();
171 try
172 {
173 if (s_nameToCodePageCache.TryGetValue(name, out var value2))
174 {
175 return value2;
176 }
177 s_nameToCodePageCache.Add(name, value);
178 return value;
179 }
180 finally
181 {
182 s_cacheLock.ExitWriteLock();
183 }
184 }
185 finally
186 {
187 s_cacheLock.ExitUpgradeableReadLock();
188 }
189 }
190
191 private static int InternalGetCodePageFromName(string name)
192 {
193 int i = 0;
194 int num = s_encodingNameIndices.Length - 2;
195 name = name.ToLowerInvariant();
196 while (num - i > 3)
197 {
198 int num2 = (num - i) / 2 + i;
199 int num3 = CompareOrdinal(name, "437arabicasmo-708big5big5-hkscsccsid00858ccsid00924ccsid01140ccsid01141ccsid01142ccsid01143ccsid01144ccsid01145ccsid01146ccsid01147ccsid01148ccsid01149chinesecn-big5cn-gbcp00858cp00924cp01140cp01141cp01142cp01143cp01144cp01145cp01146cp01147cp01148cp01149cp037cp1025cp1026cp1252cp1256cp273cp278cp280cp284cp285cp290cp297cp420cp423cp424cp437cp500cp50227cp850cp852cp855cp857cp858cp860cp861cp862cp863cp864cp865cp866cp869cp870cp871cp875cp880cp905csbig5cseuckrcseucpkdfmtjapanesecsgb2312csgb231280csibm037csibm1026csibm273csibm277csibm278csibm280csibm284csibm285csibm290csibm297csibm420csibm423csibm424csibm500csibm870csibm871csibm880csibm905csibmthaicsiso2022jpcsiso2022krcsiso58gb231280csisolatin2csisolatin3csisolatin4csisolatin5csisolatin9csisolatinarabiccsisolatincyrilliccsisolatingreekcsisolatinhebrewcskoi8rcsksc56011987cspc8codepage437csshiftjiscswindows31jcyrillicdin_66003dos-720dos-862dos-874ebcdic-cp-ar1ebcdic-cp-beebcdic-cp-caebcdic-cp-chebcdic-cp-dkebcdic-cp-esebcdic-cp-fiebcdic-cp-frebcdic-cp-gbebcdic-cp-grebcdic-cp-heebcdic-cp-isebcdic-cp-itebcdic-cp-nlebcdic-cp-noebcdic-cp-roeceebcdic-cp-seebcdic-cp-trebcdic-cp-usebcdic-cp-wtebcdic-cp-yuebcdic-cyrillicebcdic-de-273+euroebcdic-dk-277+euroebcdic-es-284+euroebcdic-fi-278+euroebcdic-fr-297+euroebcdic-gb-285+euroebcdic-international-500+euroebcdic-is-871+euroebcdic-it-280+euroebcdic-jp-kanaebcdic-latin9--euroebcdic-no-277+euroebcdic-se-278+euroebcdic-us-37+euroecma-114ecma-118elot_928euc-cneuc-jpeuc-krextended_unix_code_packed_format_for_japanesegb18030gb2312gb2312-80gb231280gb_2312-80gbkgermangreekgreek8hebrewhz-gb-2312ibm-thaiibm00858ibm00924ibm01047ibm01140ibm01141ibm01142ibm01143ibm01144ibm01145ibm01146ibm01147ibm01148ibm01149ibm037ibm1026ibm273ibm277ibm278ibm280ibm284ibm285ibm290ibm297ibm420ibm423ibm424ibm437ibm500ibm737ibm775ibm850ibm852ibm855ibm857ibm860ibm861ibm862ibm863ibm864ibm865ibm866ibm869ibm870ibm871ibm880ibm905irviso-2022-jpiso-2022-jpeuciso-2022-kriso-2022-kr-7iso-2022-kr-7bitiso-2022-kr-8iso-2022-kr-8bitiso-8859-11iso-8859-13iso-8859-15iso-8859-2iso-8859-3iso-8859-4iso-8859-5iso-8859-6iso-8859-7iso-8859-8iso-8859-8 visualiso-8859-8-iiso-8859-9iso-ir-101iso-ir-109iso-ir-110iso-ir-126iso-ir-127iso-ir-138iso-ir-144iso-ir-148iso-ir-149iso-ir-58iso8859-2iso_8859-15iso_8859-2iso_8859-2:1987iso_8859-3iso_8859-3:1988iso_8859-4iso_8859-4:1988iso_8859-5iso_8859-5:1988iso_8859-6iso_8859-6:1987iso_8859-7iso_8859-7:1987iso_8859-8iso_8859-8:1988iso_8859-9iso_8859-9:1989johabkoikoi8koi8-rkoi8-rukoi8-ukoi8rkoreanks-c-5601ks-c5601ks_c_5601ks_c_5601-1987ks_c_5601-1989ks_c_5601_1987ksc5601ksc_5601l2l3l4l5l9latin2latin3latin4latin5latin9logicalmacintoshms_kanjinorwegianns_4551-1pc-multilingual-850+eurosen_850200_bshift-jisshift_jissjisswedishtis-620visualwindows-1250windows-1251windows-1252windows-1253windows-1254windows-1255windows-1256windows-1257windows-1258windows-874x-ansix-chinese-cnsx-chinese-etenx-cp1250x-cp1251x-cp20001x-cp20003x-cp20004x-cp20005x-cp20261x-cp20269x-cp20936x-cp20949x-cp50227x-ebcdic-koreanextendedx-eucx-euc-cnx-euc-jpx-europax-ia5x-ia5-germanx-ia5-norwegianx-ia5-swedishx-iscii-asx-iscii-bex-iscii-dex-iscii-gux-iscii-kax-iscii-max-iscii-orx-iscii-pax-iscii-tax-iscii-tex-mac-arabicx-mac-cex-mac-chinesesimpx-mac-chinesetradx-mac-croatianx-mac-cyrillicx-mac-greekx-mac-hebrewx-mac-icelandicx-mac-japanesex-mac-koreanx-mac-romanianx-mac-thaix-mac-turkishx-mac-ukrainianx-ms-cp932x-sjisx-x-big5", s_encodingNameIndices[num2], s_encodingNameIndices[num2 + 1] - s_encodingNameIndices[num2]);
200 if (num3 == 0)
201 {
202 return s_codePagesByName[num2];
203 }
204 if (num3 < 0)
205 {
206 num = num2;
207 }
208 else
209 {
210 i = num2;
211 }
212 }
213 for (; i <= num; i++)
214 {
215 if (CompareOrdinal(name, "437arabicasmo-708big5big5-hkscsccsid00858ccsid00924ccsid01140ccsid01141ccsid01142ccsid01143ccsid01144ccsid01145ccsid01146ccsid01147ccsid01148ccsid01149chinesecn-big5cn-gbcp00858cp00924cp01140cp01141cp01142cp01143cp01144cp01145cp01146cp01147cp01148cp01149cp037cp1025cp1026cp1252cp1256cp273cp278cp280cp284cp285cp290cp297cp420cp423cp424cp437cp500cp50227cp850cp852cp855cp857cp858cp860cp861cp862cp863cp864cp865cp866cp869cp870cp871cp875cp880cp905csbig5cseuckrcseucpkdfmtjapanesecsgb2312csgb231280csibm037csibm1026csibm273csibm277csibm278csibm280csibm284csibm285csibm290csibm297csibm420csibm423csibm424csibm500csibm870csibm871csibm880csibm905csibmthaicsiso2022jpcsiso2022krcsiso58gb231280csisolatin2csisolatin3csisolatin4csisolatin5csisolatin9csisolatinarabiccsisolatincyrilliccsisolatingreekcsisolatinhebrewcskoi8rcsksc56011987cspc8codepage437csshiftjiscswindows31jcyrillicdin_66003dos-720dos-862dos-874ebcdic-cp-ar1ebcdic-cp-beebcdic-cp-caebcdic-cp-chebcdic-cp-dkebcdic-cp-esebcdic-cp-fiebcdic-cp-frebcdic-cp-gbebcdic-cp-grebcdic-cp-heebcdic-cp-isebcdic-cp-itebcdic-cp-nlebcdic-cp-noebcdic-cp-roeceebcdic-cp-seebcdic-cp-trebcdic-cp-usebcdic-cp-wtebcdic-cp-yuebcdic-cyrillicebcdic-de-273+euroebcdic-dk-277+euroebcdic-es-284+euroebcdic-fi-278+euroebcdic-fr-297+euroebcdic-gb-285+euroebcdic-international-500+euroebcdic-is-871+euroebcdic-it-280+euroebcdic-jp-kanaebcdic-latin9--euroebcdic-no-277+euroebcdic-se-278+euroebcdic-us-37+euroecma-114ecma-118elot_928euc-cneuc-jpeuc-krextended_unix_code_packed_format_for_japanesegb18030gb2312gb2312-80gb231280gb_2312-80gbkgermangreekgreek8hebrewhz-gb-2312ibm-thaiibm00858ibm00924ibm01047ibm01140ibm01141ibm01142ibm01143ibm01144ibm01145ibm01146ibm01147ibm01148ibm01149ibm037ibm1026ibm273ibm277ibm278ibm280ibm284ibm285ibm290ibm297ibm420ibm423ibm424ibm437ibm500ibm737ibm775ibm850ibm852ibm855ibm857ibm860ibm861ibm862ibm863ibm864ibm865ibm866ibm869ibm870ibm871ibm880ibm905irviso-2022-jpiso-2022-jpeuciso-2022-kriso-2022-kr-7iso-2022-kr-7bitiso-2022-kr-8iso-2022-kr-8bitiso-8859-11iso-8859-13iso-8859-15iso-8859-2iso-8859-3iso-8859-4iso-8859-5iso-8859-6iso-8859-7iso-8859-8iso-8859-8 visualiso-8859-8-iiso-8859-9iso-ir-101iso-ir-109iso-ir-110iso-ir-126iso-ir-127iso-ir-138iso-ir-144iso-ir-148iso-ir-149iso-ir-58iso8859-2iso_8859-15iso_8859-2iso_8859-2:1987iso_8859-3iso_8859-3:1988iso_8859-4iso_8859-4:1988iso_8859-5iso_8859-5:1988iso_8859-6iso_8859-6:1987iso_8859-7iso_8859-7:1987iso_8859-8iso_8859-8:1988iso_8859-9iso_8859-9:1989johabkoikoi8koi8-rkoi8-rukoi8-ukoi8rkoreanks-c-5601ks-c5601ks_c_5601ks_c_5601-1987ks_c_5601-1989ks_c_5601_1987ksc5601ksc_5601l2l3l4l5l9latin2latin3latin4latin5latin9logicalmacintoshms_kanjinorwegianns_4551-1pc-multilingual-850+eurosen_850200_bshift-jisshift_jissjisswedishtis-620visualwindows-1250windows-1251windows-1252windows-1253windows-1254windows-1255windows-1256windows-1257windows-1258windows-874x-ansix-chinese-cnsx-chinese-etenx-cp1250x-cp1251x-cp20001x-cp20003x-cp20004x-cp20005x-cp20261x-cp20269x-cp20936x-cp20949x-cp50227x-ebcdic-koreanextendedx-eucx-euc-cnx-euc-jpx-europax-ia5x-ia5-germanx-ia5-norwegianx-ia5-swedishx-iscii-asx-iscii-bex-iscii-dex-iscii-gux-iscii-kax-iscii-max-iscii-orx-iscii-pax-iscii-tax-iscii-tex-mac-arabicx-mac-cex-mac-chinesesimpx-mac-chinesetradx-mac-croatianx-mac-cyrillicx-mac-greekx-mac-hebrewx-mac-icelandicx-mac-japanesex-mac-koreanx-mac-romanianx-mac-thaix-mac-turkishx-mac-ukrainianx-ms-cp932x-sjisx-x-big5", s_encodingNameIndices[i], s_encodingNameIndices[i + 1] - s_encodingNameIndices[i]) == 0)
216 {
217 return s_codePagesByName[i];
218 }
219 }
220 return 0;
221 }
222
223 private static int CompareOrdinal(string s1, string s2, int index, int length)
224 {
225 int num = s1.Length;
226 if (num > length)
227 {
228 num = length;
229 }
230 int i;
231 for (i = 0; i < num && s1[i] == s2[index + i]; i++)
232 {
233 }
234 if (i < num)
235 {
236 return s1[i] - s2[index + i];
237 }
238 return s1.Length - length;
239 }
240
241 internal static string GetWebNameFromCodePage(int codePage)
242 {
243 return GetNameFromCodePage(codePage, "ibm037ibm437ibm500asmo-708dos-720ibm737ibm775ibm850ibm852ibm855ibm857ibm00858ibm860ibm861dos-862ibm863ibm864ibm865cp866ibm869ibm870windows-874cp875shift_jisgb2312ks_c_5601-1987big5ibm1026ibm01047ibm01140ibm01141ibm01142ibm01143ibm01144ibm01145ibm01146ibm01147ibm01148ibm01149windows-1250windows-1251windows-1252windows-1253windows-1254windows-1255windows-1256windows-1257windows-1258johabmacintoshx-mac-japanesex-mac-chinesetradx-mac-koreanx-mac-arabicx-mac-hebrewx-mac-greekx-mac-cyrillicx-mac-chinesesimpx-mac-romanianx-mac-ukrainianx-mac-thaix-mac-cex-mac-icelandicx-mac-turkishx-mac-croatianx-chinese-cnsx-cp20001x-chinese-etenx-cp20003x-cp20004x-cp20005x-ia5x-ia5-germanx-ia5-swedishx-ia5-norwegianx-cp20261x-cp20269ibm273ibm277ibm278ibm280ibm284ibm285ibm290ibm297ibm420ibm423ibm424x-ebcdic-koreanextendedibm-thaikoi8-ribm871ibm880ibm905ibm00924euc-jpx-cp20936x-cp20949cp1025koi8-uiso-8859-2iso-8859-3iso-8859-4iso-8859-5iso-8859-6iso-8859-7iso-8859-8iso-8859-9iso-8859-13iso-8859-15x-europaiso-8859-8-iiso-2022-jpcsiso2022jpiso-2022-jpiso-2022-krx-cp50227euc-jpeuc-cneuc-krhz-gb-2312gb18030x-iscii-dex-iscii-bex-iscii-tax-iscii-tex-iscii-asx-iscii-orx-iscii-kax-iscii-max-iscii-gux-iscii-pa", s_webNameIndices, s_codePageToWebNameCache);
244 }
245
246 internal static string GetEnglishNameFromCodePage(int codePage)
247 {
248 return GetNameFromCodePage(codePage, "IBM EBCDIC (US-Canada)OEM United StatesIBM EBCDIC (International)Arabic (ASMO 708)Arabic (DOS)Greek (DOS)Baltic (DOS)Western European (DOS)Central European (DOS)OEM CyrillicTurkish (DOS)OEM Multilingual Latin IPortuguese (DOS)Icelandic (DOS)Hebrew (DOS)French Canadian (DOS)Arabic (864)Nordic (DOS)Cyrillic (DOS)Greek, Modern (DOS)IBM EBCDIC (Multilingual Latin-2)Thai (Windows)IBM EBCDIC (Greek Modern)Japanese (Shift-JIS)Chinese Simplified (GB2312)KoreanChinese Traditional (Big5)IBM EBCDIC (Turkish Latin-5)IBM Latin-1IBM EBCDIC (US-Canada-Euro)IBM EBCDIC (Germany-Euro)IBM EBCDIC (Denmark-Norway-Euro)IBM EBCDIC (Finland-Sweden-Euro)IBM EBCDIC (Italy-Euro)IBM EBCDIC (Spain-Euro)IBM EBCDIC (UK-Euro)IBM EBCDIC (France-Euro)IBM EBCDIC (International-Euro)IBM EBCDIC (Icelandic-Euro)Central European (Windows)Cyrillic (Windows)Western European (Windows)Greek (Windows)Turkish (Windows)Hebrew (Windows)Arabic (Windows)Baltic (Windows)Vietnamese (Windows)Korean (Johab)Western European (Mac)Japanese (Mac)Chinese Traditional (Mac)Korean (Mac)Arabic (Mac)Hebrew (Mac)Greek (Mac)Cyrillic (Mac)Chinese Simplified (Mac)Romanian (Mac)Ukrainian (Mac)Thai (Mac)Central European (Mac)Icelandic (Mac)Turkish (Mac)Croatian (Mac)Chinese Traditional (CNS)TCA TaiwanChinese Traditional (Eten)IBM5550 TaiwanTeleText TaiwanWang TaiwanWestern European (IA5)German (IA5)Swedish (IA5)Norwegian (IA5)T.61ISO-6937IBM EBCDIC (Germany)IBM EBCDIC (Denmark-Norway)IBM EBCDIC (Finland-Sweden)IBM EBCDIC (Italy)IBM EBCDIC (Spain)IBM EBCDIC (UK)IBM EBCDIC (Japanese katakana)IBM EBCDIC (France)IBM EBCDIC (Arabic)IBM EBCDIC (Greek)IBM EBCDIC (Hebrew)IBM EBCDIC (Korean Extended)IBM EBCDIC (Thai)Cyrillic (KOI8-R)IBM EBCDIC (Icelandic)IBM EBCDIC (Cyrillic Russian)IBM EBCDIC (Turkish)IBM Latin-1Japanese (JIS 0208-1990 and 0212-1990)Chinese Simplified (GB2312-80)Korean WansungIBM EBCDIC (Cyrillic Serbian-Bulgarian)Cyrillic (KOI8-U)Central European (ISO)Latin 3 (ISO)Baltic (ISO)Cyrillic (ISO)Arabic (ISO)Greek (ISO)Hebrew (ISO-Visual)Turkish (ISO)Estonian (ISO)Latin 9 (ISO)EuropaHebrew (ISO-Logical)Japanese (JIS)Japanese (JIS-Allow 1 byte Kana)Japanese (JIS-Allow 1 byte Kana - SO/SI)Korean (ISO)Chinese Simplified (ISO-2022)Japanese (EUC)Chinese Simplified (EUC)Korean (EUC)Chinese Simplified (HZ)Chinese Simplified (GB18030)ISCII DevanagariISCII BengaliISCII TamilISCII TeluguISCII AssameseISCII OriyaISCII KannadaISCII MalayalamISCII GujaratiISCII Punjabi", s_englishNameIndices, s_codePageToEnglishNameCache);
249 }
250
251 private static string GetNameFromCodePage(int codePage, string names, int[] indices, Dictionary<int, string> cache)
252 {
253 for (int i = 0; i < s_mappedCodePages.Length; i++)
254 {
255 if (s_mappedCodePages[i] != codePage)
256 {
257 continue;
258 }
259 s_cacheLock.EnterUpgradeableReadLock();
260 try
261 {
263 {
264 return value;
265 }
266 value = names.Substring(indices[i], indices[i + 1] - indices[i]);
267 s_cacheLock.EnterWriteLock();
268 try
269 {
271 {
272 return value2;
273 }
275 return value;
276 }
277 finally
278 {
279 s_cacheLock.ExitWriteLock();
280 }
281 }
282 finally
283 {
284 s_cacheLock.ExitUpgradeableReadLock();
285 }
286 }
287 return null;
288 }
289}
bool TryGetValue(TKey key, [MaybeNullWhen(false)] out TValue value)
void Add(TKey key, TValue value)
static StringComparer OrdinalIgnoreCase
static readonly Dictionary< string, int > s_nameToCodePageCache
static readonly Dictionary< int, string > s_codePageToWebNameCache
static readonly ushort[] s_mappedCodePages
static readonly int[] s_webNameIndices
static string GetWebNameFromCodePage(int codePage)
static readonly ushort[] s_codePagesByName
static int InternalGetCodePageFromName(string name)
static readonly ReaderWriterLockSlim s_cacheLock
static readonly Dictionary< int, string > s_codePageToEnglishNameCache
static readonly int[] s_englishNameIndices
static readonly int[] s_encodingNameIndices
static int GetCodePageFromName(string name)
static string GetEnglishNameFromCodePage(int codePage)
static int CompareOrdinal(string s1, string s2, int index, int length)
static string GetNameFromCodePage(int codePage, string names, int[] indices, Dictionary< int, string > cache)