1 // Licensed to the .NET Foundation under one or more agreements. 2 // The .NET Foundation licenses this file to you under the MIT license. 3 // See the LICENSE file in the project root for more information. 4 // 5 // THIS IS AUTOGENERATED FILE 6 // USE ENCODINGDATA TOOL TO GENERATE SUCH FILE 7 // 8 9 namespace System.Text 10 { 11 internal static partial class EncodingTable 12 { 13 // 14 // s_encodingNames is the concatenation of all supported IANA names for each codepage. 15 // This is done rather than using a large readonly array of strings to avoid 16 // generating a large amount of code in the static constructor. 17 // Using indices from s_encodingNamesIndices, we binary search this string when mapping 18 // an encoding name to a codepage. Note that these names are all lowercase and are 19 // sorted alphabetically. 20 // 21 private const string s_encodingNames = 22 "ansi_x3.4-1968" + // 20127 23 "ansi_x3.4-1986" + // 20127 24 "ascii" + // 20127 25 "cp367" + // 20127 26 "cp819" + // 28591 27 "csascii" + // 20127 28 "csisolatin1" + // 28591 29 "csunicode11utf7" + // 65000 30 "ibm367" + // 20127 31 "ibm819" + // 28591 32 "iso-10646-ucs-2" + // 1200 33 "iso-8859-1" + // 28591 34 "iso-ir-100" + // 28591 35 "iso-ir-6" + // 20127 36 "iso646-us" + // 20127 37 "iso8859-1" + // 28591 38 "iso_646.irv:1991" + // 20127 39 "iso_8859-1" + // 28591 40 "iso_8859-1:1987" + // 28591 41 "l1" + // 28591 42 "latin1" + // 28591 43 "ucs-2" + // 1200 44 "unicode" + // 1200 45 "unicode-1-1-utf-7" + // 65000 46 "unicode-1-1-utf-8" + // 65001 47 "unicode-2-0-utf-7" + // 65000 48 "unicode-2-0-utf-8" + // 65001 49 "unicodefffe" + // 1201 50 "us" + // 20127 51 "us-ascii" + // 20127 52 "utf-16" + // 1200 53 "utf-16be" + // 1201 54 "utf-16le" + // 1200 55 "utf-32" + // 12000 56 "utf-32be" + // 12001 57 "utf-32le" + // 12000 58 "utf-7" + // 65000 59 "utf-8" + // 65001 60 "x-unicode-1-1-utf-7" + // 65000 61 "x-unicode-1-1-utf-8" + // 65001 62 "x-unicode-2-0-utf-7" + // 65000 63 "x-unicode-2-0-utf-8"; // 65001 64 65 // 66 // s_encodingNameIndices contains the start index of every encoding name in the string 67 // s_encodingNames. We infer the length of each string by looking at the start index 68 // of the next string. 69 // 70 private static readonly int[] s_encodingNameIndices = new int[] 71 { 72 0, // ansi_x3.4-1968 (20127) 73 14, // ansi_x3.4-1986 (20127) 74 28, // ascii (20127) 75 33, // cp367 (20127) 76 38, // cp819 (28591) 77 43, // csascii (20127) 78 50, // csisolatin1 (28591) 79 61, // csunicode11utf7 (65000) 80 76, // ibm367 (20127) 81 82, // ibm819 (28591) 82 88, // iso-10646-ucs-2 (1200) 83 103, // iso-8859-1 (28591) 84 113, // iso-ir-100 (28591) 85 123, // iso-ir-6 (20127) 86 131, // iso646-us (20127) 87 140, // iso8859-1 (28591) 88 149, // iso_646.irv:1991 (20127) 89 165, // iso_8859-1 (28591) 90 175, // iso_8859-1:1987 (28591) 91 190, // l1 (28591) 92 192, // latin1 (28591) 93 198, // ucs-2 (1200) 94 203, // unicode (1200) 95 210, // unicode-1-1-utf-7 (65000) 96 227, // unicode-1-1-utf-8 (65001) 97 244, // unicode-2-0-utf-7 (65000) 98 261, // unicode-2-0-utf-8 (65001) 99 278, // unicodefffe (1201) 100 289, // us (20127) 101 291, // us-ascii (20127) 102 299, // utf-16 (1200) 103 305, // utf-16be (1201) 104 313, // utf-16le (1200) 105 321, // utf-32 (12000) 106 327, // utf-32be (12001) 107 335, // utf-32le (12000) 108 343, // utf-7 (65000) 109 348, // utf-8 (65001) 110 353, // x-unicode-1-1-utf-7 (65000) 111 372, // x-unicode-1-1-utf-8 (65001) 112 391, // x-unicode-2-0-utf-7 (65000) 113 410, // x-unicode-2-0-utf-8 (65001) 114 429 115 }; 116 117 // 118 // s_codePagesByName contains the list of supported codepages which match the encoding 119 // names listed in s_encodingNames. The way mapping works is we binary search 120 // s_encodingNames using s_encodingNamesIndices until we find a match for a given name. 121 // The index of the entry in s_encodingNamesIndices will be the index of codepage in 122 // s_codePagesByName. 123 // 124 private static readonly UInt16[] s_codePagesByName = new UInt16[] 125 { 126 20127, // ansi_x3.4-1968 127 20127, // ansi_x3.4-1986 128 20127, // ascii 129 20127, // cp367 130 28591, // cp819 131 20127, // csascii 132 28591, // csisolatin1 133 65000, // csunicode11utf7 134 20127, // ibm367 135 28591, // ibm819 136 1200, // iso-10646-ucs-2 137 28591, // iso-8859-1 138 28591, // iso-ir-100 139 20127, // iso-ir-6 140 20127, // iso646-us 141 28591, // iso8859-1 142 20127, // iso_646.irv:1991 143 28591, // iso_8859-1 144 28591, // iso_8859-1:1987 145 28591, // l1 146 28591, // latin1 147 1200, // ucs-2 148 1200, // unicode 149 65000, // unicode-1-1-utf-7 150 65001, // unicode-1-1-utf-8 151 65000, // unicode-2-0-utf-7 152 65001, // unicode-2-0-utf-8 153 1201, // unicodefffe 154 20127, // us 155 20127, // us-ascii 156 1200, // utf-16 157 1201, // utf-16be 158 1200, // utf-16le 159 12000, // utf-32 160 12001, // utf-32be 161 12000, // utf-32le 162 65000, // utf-7 163 65001, // utf-8 164 65000, // x-unicode-1-1-utf-7 165 65001, // x-unicode-1-1-utf-8 166 65000, // x-unicode-2-0-utf-7 167 65001 // x-unicode-2-0-utf-8 168 }; 169 170 // 171 // When retrieving the value for System.Text.Encoding.WebName or 172 // System.Text.Encoding.EncodingName given System.Text.Encoding.CodePage, 173 // we perform a linear search on s_mappedCodePages to find the index of the 174 // given codepage. This is used to index WebNameIndices to get the start 175 // index of the web name in the string WebNames, and to index 176 // s_englishNameIndices to get the start of the English name in 177 // s_englishNames. In addition, this arrays indices correspond to the indices 178 // into s_uiFamilyCodePages and s_flags. 179 // 180 private static readonly UInt16[] s_mappedCodePages = new UInt16[] 181 { 182 1200, // utf-16 183 1201, // utf-16be 184 12000, // utf-32 185 12001, // utf-32be 186 20127, // us-ascii 187 28591, // iso-8859-1 188 65000, // utf-7 189 65001 // utf-8 190 }; 191 192 // 193 // s_uiFamilyCodePages is indexed by the corresponding index in s_mappedCodePages. 194 // 195 private static readonly int[] s_uiFamilyCodePages = new int[] 196 { 197 1200, 198 1200, 199 1200, 200 1200, 201 1252, 202 1252, 203 1200, 204 1200 205 }; 206 207 // 208 // s_webNames is a concatenation of the default encoding names 209 // for each code page. It is used in retrieving the value for 210 // System.Text.Encoding.WebName given System.Text.Encoding.CodePage. 211 // This is done rather than using a large readonly array of strings to avoid 212 // generating a large amount of code in the static constructor. 213 // 214 private const string s_webNames = 215 "utf-16" + // 1200 216 "utf-16BE" + // 1201 217 "utf-32" + // 12000 218 "utf-32BE" + // 12001 219 "us-ascii" + // 20127 220 "iso-8859-1" + // 28591 221 "utf-7" + // 65000 222 "utf-8"; // 65001 223 224 // 225 // s_webNameIndices contains the start index of each code page's default 226 // web name in the string s_webNames. It is indexed by an index into 227 // s_mappedCodePages. 228 // 229 private static readonly int[] s_webNameIndices = new int[] 230 { 231 0, // utf-16 (1200) 232 6, // utf-16be (1201) 233 14, // utf-32 (12000) 234 20, // utf-32be (12001) 235 28, // us-ascii (20127) 236 36, // iso-8859-1 (28591) 237 46, // utf-7 (65000) 238 51, // utf-8 (65001) 239 56 240 }; 241 242 // 243 // s_englishNames is the concatenation of the English names for each codepage. 244 // It is used in retrieving the value for System.Text.Encoding.EncodingName 245 // given System.Text.Encoding.CodePage. 246 // This is done rather than using a large readonly array of strings to avoid 247 // generating a large amount of code in the static constructor. 248 // 249 private const string s_englishNames = 250 "Unicode" + // 1200 251 "Unicode (Big-Endian)" + // 1201 252 "Unicode (UTF-32)" + // 12000 253 "Unicode (UTF-32 Big-Endian)" + // 12001 254 "US-ASCII" + // 20127 255 "Western European (ISO)" + // 28591 256 "Unicode (UTF-7)" + // 65000 257 "Unicode (UTF-8)"; // 65001 258 259 // 260 // s_englishNameIndices contains the start index of each code page's English 261 // name in the string s_englishNames. It is indexed by an index into 262 // s_mappedCodePages. 263 // 264 private static readonly int[] s_englishNameIndices = new int[] 265 { 266 0, // Unicode (1200) 267 7, // Unicode (Big-Endian) (1201) 268 27, // Unicode (UTF-32) (12000) 269 43, // Unicode (UTF-32 Big-Endian) (12001) 270 70, // US-ASCII (20127) 271 78, // Western European (ISO) (28591) 272 100, // Unicode (UTF-7) (65000) 273 115, // Unicode (UTF-8) (65001) 274 130 275 }; 276 277 // redeclaring these constants here for readability below 278 private const uint MIMECONTF_MAILNEWS = Encoding.MIMECONTF_MAILNEWS; 279 private const uint MIMECONTF_BROWSER = Encoding.MIMECONTF_BROWSER; 280 private const uint MIMECONTF_SAVABLE_MAILNEWS = Encoding.MIMECONTF_SAVABLE_MAILNEWS; 281 private const uint MIMECONTF_SAVABLE_BROWSER = Encoding.MIMECONTF_SAVABLE_BROWSER; 282 283 // 284 //s_flags is indexed by the corresponding index in s_mappedCodePages. 285 // 286 private static readonly uint[] s_flags = new uint[] 287 { 288 MIMECONTF_SAVABLE_BROWSER, 289 0, 290 0, 291 0, 292 MIMECONTF_MAILNEWS | MIMECONTF_SAVABLE_MAILNEWS, 293 MIMECONTF_MAILNEWS | MIMECONTF_BROWSER | MIMECONTF_SAVABLE_MAILNEWS | MIMECONTF_SAVABLE_BROWSER, 294 MIMECONTF_MAILNEWS | MIMECONTF_SAVABLE_MAILNEWS, 295 MIMECONTF_MAILNEWS | MIMECONTF_BROWSER | MIMECONTF_SAVABLE_MAILNEWS | MIMECONTF_SAVABLE_BROWSER 296 }; 297 } 298 } 299