|
1 /* |
|
2 * Copyright (c) 2002, 2013, Oracle and/or its affiliates. All rights reserved. |
|
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. |
|
4 * |
|
5 * This code is free software; you can redistribute it and/or modify it |
|
6 * under the terms of the GNU General Public License version 2 only, as |
|
7 * published by the Free Software Foundation. Oracle designates this |
|
8 * particular file as subject to the "Classpath" exception as provided |
|
9 * by Oracle in the LICENSE file that accompanied this code. |
|
10 * |
|
11 * This code is distributed in the hope that it will be useful, but WITHOUT |
|
12 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or |
|
13 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License |
|
14 * version 2 for more details (a copy is included in the LICENSE file that |
|
15 * accompanied this code). |
|
16 * |
|
17 * You should have received a copy of the GNU General Public License version |
|
18 * 2 along with this work; if not, write to the Free Software Foundation, |
|
19 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. |
|
20 * |
|
21 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA |
|
22 * or visit www.oracle.com if you need additional information or have any |
|
23 * questions. |
|
24 */ |
|
25 |
|
26 package sun.nio.cs.ext; |
|
27 |
|
28 import java.lang.ref.SoftReference; |
|
29 import java.nio.charset.Charset; |
|
30 import java.nio.charset.spi.CharsetProvider; |
|
31 import sun.nio.cs.AbstractCharsetProvider; |
|
32 import java.security.AccessController; |
|
33 import java.security.PrivilegedAction; |
|
34 |
|
35 /** |
|
36 * Provider for extended charsets. |
|
37 */ |
|
38 |
|
39 public class ExtendedCharsets |
|
40 extends AbstractCharsetProvider |
|
41 { |
|
42 |
|
43 static volatile ExtendedCharsets instance = null; |
|
44 |
|
45 public ExtendedCharsets() { |
|
46 |
|
47 super("sun.nio.cs.ext"); // identify provider pkg name. |
|
48 |
|
49 // Traditional Chinese |
|
50 |
|
51 charset("Big5", "Big5", |
|
52 new String[] { |
|
53 // IANA aliases |
|
54 "csBig5" |
|
55 }); |
|
56 |
|
57 charset("x-MS950-HKSCS-XP", "MS950_HKSCS_XP", |
|
58 new String[] { |
|
59 "MS950_HKSCS_XP" // JDK historical; |
|
60 }); |
|
61 |
|
62 charset("x-MS950-HKSCS", "MS950_HKSCS", |
|
63 new String[] { |
|
64 // IANA aliases |
|
65 "MS950_HKSCS" // JDK historical; |
|
66 }); |
|
67 |
|
68 charset("x-windows-950", "MS950", |
|
69 new String[] { |
|
70 "ms950", // JDK historical |
|
71 "windows-950" |
|
72 }); |
|
73 |
|
74 charset("x-windows-874", "MS874", |
|
75 new String[] { |
|
76 "ms874", // JDK historical |
|
77 "ms-874", |
|
78 "windows-874" }); |
|
79 |
|
80 charset("x-EUC-TW", "EUC_TW", |
|
81 new String[] { |
|
82 "euc_tw", // JDK historical |
|
83 "euctw", |
|
84 "cns11643", |
|
85 "EUC-TW" |
|
86 }); |
|
87 |
|
88 charset("Big5-HKSCS", "Big5_HKSCS", |
|
89 new String[] { |
|
90 "Big5_HKSCS", // JDK historical |
|
91 "big5hk", |
|
92 "big5-hkscs", |
|
93 "big5hkscs" // Linux alias |
|
94 }); |
|
95 |
|
96 charset("x-Big5-HKSCS-2001", "Big5_HKSCS_2001", |
|
97 new String[] { |
|
98 "Big5_HKSCS_2001", |
|
99 "big5hk-2001", |
|
100 "big5-hkscs-2001", |
|
101 "big5-hkscs:unicode3.0", |
|
102 "big5hkscs-2001", |
|
103 }); |
|
104 |
|
105 charset("x-Big5-Solaris", "Big5_Solaris", |
|
106 new String[] { |
|
107 "Big5_Solaris", // JDK historical |
|
108 }); |
|
109 |
|
110 // Simplified Chinese |
|
111 charset("GBK", "GBK", |
|
112 new String[] { |
|
113 "windows-936", |
|
114 "CP936" |
|
115 }); |
|
116 |
|
117 charset("GB18030", "GB18030", |
|
118 new String[] { |
|
119 "gb18030-2000" |
|
120 }); |
|
121 |
|
122 charset("GB2312", "EUC_CN", |
|
123 new String[] { |
|
124 // IANA aliases |
|
125 "gb2312", |
|
126 "gb2312-80", |
|
127 "gb2312-1980", |
|
128 "euc-cn", |
|
129 "euccn", |
|
130 "x-EUC-CN", // 1.4 compatibility |
|
131 "EUC_CN" //JDK historical |
|
132 }); |
|
133 |
|
134 charset("x-mswin-936", "MS936", |
|
135 new String[] { |
|
136 "ms936", // historical |
|
137 // IANA aliases |
|
138 "ms_936" |
|
139 }); |
|
140 |
|
141 // The definition of this charset may be overridden by the init method, |
|
142 // below, if the sun.nio.cs.map property is defined. |
|
143 // |
|
144 charset("Shift_JIS", "SJIS", |
|
145 new String[] { |
|
146 // IANA aliases |
|
147 "sjis", // historical |
|
148 "shift_jis", |
|
149 "shift-jis", |
|
150 "ms_kanji", |
|
151 "x-sjis", |
|
152 "csShiftJIS" |
|
153 }); |
|
154 |
|
155 // The definition of this charset may be overridden by the init method, |
|
156 // below, if the sun.nio.cs.map property is defined. |
|
157 // |
|
158 charset("windows-31j", "MS932", |
|
159 new String[] { |
|
160 "MS932", // JDK historical |
|
161 "windows-932", |
|
162 "csWindows31J" |
|
163 }); |
|
164 |
|
165 charset("JIS_X0201", "JIS_X_0201", |
|
166 new String[] { |
|
167 "JIS0201", // JDK historical |
|
168 // IANA aliases |
|
169 "JIS_X0201", |
|
170 "X0201", |
|
171 "csHalfWidthKatakana" |
|
172 }); |
|
173 |
|
174 charset("x-JIS0208", "JIS_X_0208", |
|
175 new String[] { |
|
176 "JIS0208", // JDK historical |
|
177 // IANA aliases |
|
178 "JIS_C6226-1983", |
|
179 "iso-ir-87", |
|
180 "x0208", |
|
181 "JIS_X0208-1983", |
|
182 "csISO87JISX0208" |
|
183 }); |
|
184 |
|
185 charset("JIS_X0212-1990", "JIS_X_0212", |
|
186 new String[] { |
|
187 "JIS0212", // JDK historical |
|
188 // IANA aliases |
|
189 "jis_x0212-1990", |
|
190 "x0212", |
|
191 "iso-ir-159", |
|
192 "csISO159JISX02121990" |
|
193 }); |
|
194 |
|
195 charset("x-SJIS_0213", "SJIS_0213", |
|
196 new String[] { |
|
197 "sjis-0213", |
|
198 "sjis_0213", |
|
199 "sjis:2004", |
|
200 "sjis_0213:2004", |
|
201 "shift_jis_0213:2004", |
|
202 "shift_jis:2004" |
|
203 }); |
|
204 |
|
205 charset("x-MS932_0213", "MS932_0213", |
|
206 new String[] { |
|
207 "MS932-0213", |
|
208 "MS932_0213", |
|
209 "MS932:2004", |
|
210 "windows-932-0213", |
|
211 "windows-932:2004" |
|
212 }); |
|
213 |
|
214 charset("EUC-JP", "EUC_JP", |
|
215 new String[] { |
|
216 "euc_jp", // JDK historical |
|
217 // IANA aliases |
|
218 "eucjis", |
|
219 "eucjp", |
|
220 "Extended_UNIX_Code_Packed_Format_for_Japanese", |
|
221 "csEUCPkdFmtjapanese", |
|
222 "x-euc-jp", |
|
223 "x-eucjp" |
|
224 }); |
|
225 |
|
226 charset("x-euc-jp-linux", "EUC_JP_LINUX", |
|
227 new String[] { |
|
228 "euc_jp_linux", // JDK historical |
|
229 "euc-jp-linux" |
|
230 }); |
|
231 |
|
232 charset("x-eucjp-open", "EUC_JP_Open", |
|
233 new String[] { |
|
234 "EUC_JP_Solaris", // JDK historical |
|
235 "eucJP-open" |
|
236 }); |
|
237 |
|
238 charset("x-PCK", "PCK", |
|
239 new String[] { |
|
240 // IANA aliases |
|
241 "pck" // historical |
|
242 }); |
|
243 |
|
244 charset("ISO-2022-JP", "ISO2022_JP", |
|
245 new String[] { |
|
246 // IANA aliases |
|
247 "iso2022jp", // historical |
|
248 "jis", |
|
249 "csISO2022JP", |
|
250 "jis_encoding", |
|
251 "csjisencoding" |
|
252 }); |
|
253 |
|
254 charset("ISO-2022-JP-2", "ISO2022_JP_2", |
|
255 new String[] { |
|
256 // IANA aliases |
|
257 "csISO2022JP2", |
|
258 "iso2022jp2" |
|
259 }); |
|
260 |
|
261 charset("x-windows-50221", "MS50221", |
|
262 new String[] { |
|
263 "ms50221", // historical |
|
264 "cp50221", |
|
265 }); |
|
266 |
|
267 charset("x-windows-50220", "MS50220", |
|
268 new String[] { |
|
269 "ms50220", // historical |
|
270 "cp50220", |
|
271 }); |
|
272 |
|
273 charset("x-windows-iso2022jp", "MSISO2022JP", |
|
274 new String[] { |
|
275 "windows-iso2022jp", // historical |
|
276 }); |
|
277 |
|
278 charset("x-JISAutoDetect", "JISAutoDetect", |
|
279 new String[] { |
|
280 "JISAutoDetect" // historical |
|
281 }); |
|
282 |
|
283 // Korean |
|
284 charset("EUC-KR", "EUC_KR", |
|
285 new String[] { |
|
286 "euc_kr", // JDK historical |
|
287 // IANA aliases |
|
288 "ksc5601", |
|
289 "euckr", |
|
290 "ks_c_5601-1987", |
|
291 "ksc5601-1987", |
|
292 "ksc5601_1987", |
|
293 "ksc_5601", |
|
294 "csEUCKR", |
|
295 "5601" |
|
296 }); |
|
297 |
|
298 charset("x-windows-949", "MS949", |
|
299 new String[] { |
|
300 "ms949", // JDK historical |
|
301 "windows949", |
|
302 "windows-949", |
|
303 // IANA aliases |
|
304 "ms_949" |
|
305 }); |
|
306 |
|
307 charset("x-Johab", "Johab", |
|
308 new String[] { |
|
309 "ksc5601-1992", |
|
310 "ksc5601_1992", |
|
311 "ms1361", |
|
312 "johab" // JDK historical |
|
313 }); |
|
314 |
|
315 charset("ISO-2022-KR", "ISO2022_KR", |
|
316 new String[] { |
|
317 "ISO2022KR", // JDK historical |
|
318 "csISO2022KR" |
|
319 }); |
|
320 |
|
321 charset("ISO-2022-CN", "ISO2022_CN", |
|
322 new String[] { |
|
323 "ISO2022CN", // JDK historical |
|
324 "csISO2022CN" |
|
325 }); |
|
326 |
|
327 charset("x-ISO-2022-CN-CNS", "ISO2022_CN_CNS", |
|
328 new String[] { |
|
329 "ISO2022CN_CNS", // JDK historical |
|
330 "ISO-2022-CN-CNS" |
|
331 }); |
|
332 |
|
333 charset("x-ISO-2022-CN-GB", "ISO2022_CN_GB", |
|
334 new String[] { |
|
335 "ISO2022CN_GB", // JDK historical |
|
336 "ISO-2022-CN-GB" |
|
337 }); |
|
338 |
|
339 charset("x-ISCII91", "ISCII91", |
|
340 new String[] { |
|
341 "iscii", |
|
342 "ST_SEV_358-88", |
|
343 "iso-ir-153", |
|
344 "csISO153GOST1976874", |
|
345 "ISCII91" // JDK historical |
|
346 }); |
|
347 |
|
348 charset("ISO-8859-3", "ISO_8859_3", |
|
349 new String[] { |
|
350 "iso8859_3", // JDK historical |
|
351 "8859_3", |
|
352 "ISO_8859-3:1988", |
|
353 "iso-ir-109", |
|
354 "ISO_8859-3", |
|
355 "ISO8859-3", |
|
356 "latin3", |
|
357 "l3", |
|
358 "ibm913", |
|
359 "ibm-913", |
|
360 "cp913", |
|
361 "913", |
|
362 "csISOLatin3" |
|
363 }); |
|
364 |
|
365 charset("ISO-8859-6", "ISO_8859_6", |
|
366 new String[] { |
|
367 "iso8859_6", // JDK historical |
|
368 "8859_6", |
|
369 "iso-ir-127", |
|
370 "ISO_8859-6", |
|
371 "ISO_8859-6:1987", |
|
372 "ISO8859-6", |
|
373 "ECMA-114", |
|
374 "ASMO-708", |
|
375 "arabic", |
|
376 "ibm1089", |
|
377 "ibm-1089", |
|
378 "cp1089", |
|
379 "1089", |
|
380 "csISOLatinArabic" |
|
381 }); |
|
382 |
|
383 charset("ISO-8859-8", "ISO_8859_8", |
|
384 new String[] { |
|
385 "iso8859_8", // JDK historical |
|
386 "8859_8", |
|
387 "iso-ir-138", |
|
388 "ISO_8859-8", |
|
389 "ISO_8859-8:1988", |
|
390 "ISO8859-8", |
|
391 "cp916", |
|
392 "916", |
|
393 "ibm916", |
|
394 "ibm-916", |
|
395 "hebrew", |
|
396 "csISOLatinHebrew" |
|
397 }); |
|
398 |
|
399 charset("x-ISO-8859-11", "ISO_8859_11", |
|
400 new String[] { |
|
401 "iso-8859-11", |
|
402 "iso8859_11" |
|
403 }); |
|
404 |
|
405 charset("TIS-620", "TIS_620", |
|
406 new String[] { |
|
407 "tis620", // JDK historical |
|
408 "tis620.2533" |
|
409 }); |
|
410 |
|
411 // Various Microsoft Windows international codepages |
|
412 |
|
413 charset("windows-1255", "MS1255", |
|
414 new String[] { |
|
415 "cp1255" // JDK historical |
|
416 }); |
|
417 |
|
418 charset("windows-1256", "MS1256", |
|
419 new String[] { |
|
420 "cp1256" // JDK historical |
|
421 }); |
|
422 |
|
423 charset("windows-1258", "MS1258", |
|
424 new String[] { |
|
425 "cp1258" // JDK historical |
|
426 }); |
|
427 |
|
428 // IBM & PC/MSDOS encodings |
|
429 |
|
430 charset("x-IBM942", "IBM942", |
|
431 new String[] { |
|
432 "cp942", // JDK historical |
|
433 "ibm942", |
|
434 "ibm-942", |
|
435 "942" |
|
436 }); |
|
437 |
|
438 charset("x-IBM942C", "IBM942C", |
|
439 new String[] { |
|
440 "cp942C", // JDK historical |
|
441 "ibm942C", |
|
442 "ibm-942C", |
|
443 "942C" |
|
444 }); |
|
445 |
|
446 charset("x-IBM943", "IBM943", |
|
447 new String[] { |
|
448 "cp943", // JDK historical |
|
449 "ibm943", |
|
450 "ibm-943", |
|
451 "943" |
|
452 }); |
|
453 |
|
454 charset("x-IBM943C", "IBM943C", |
|
455 new String[] { |
|
456 "cp943C", // JDK historical |
|
457 "ibm943C", |
|
458 "ibm-943C", |
|
459 "943C" |
|
460 }); |
|
461 |
|
462 charset("x-IBM948", "IBM948", |
|
463 new String[] { |
|
464 "cp948", // JDK historical |
|
465 "ibm948", |
|
466 "ibm-948", |
|
467 "948" |
|
468 }); |
|
469 |
|
470 charset("x-IBM950", "IBM950", |
|
471 new String[] { |
|
472 "cp950", // JDK historical |
|
473 "ibm950", |
|
474 "ibm-950", |
|
475 "950" |
|
476 }); |
|
477 |
|
478 charset("x-IBM930", "IBM930", |
|
479 new String[] { |
|
480 "cp930", // JDK historical |
|
481 "ibm930", |
|
482 "ibm-930", |
|
483 "930" |
|
484 }); |
|
485 |
|
486 charset("x-IBM935", "IBM935", |
|
487 new String[] { |
|
488 "cp935", // JDK historical |
|
489 "ibm935", |
|
490 "ibm-935", |
|
491 "935" |
|
492 }); |
|
493 |
|
494 charset("x-IBM937", "IBM937", |
|
495 new String[] { |
|
496 "cp937", // JDK historical |
|
497 "ibm937", |
|
498 "ibm-937", |
|
499 "937" |
|
500 }); |
|
501 |
|
502 charset("x-IBM856", "IBM856", |
|
503 new String[] { |
|
504 "cp856", // JDK historical |
|
505 "ibm-856", |
|
506 "ibm856", |
|
507 "856" |
|
508 }); |
|
509 |
|
510 charset("IBM860", "IBM860", |
|
511 new String[] { |
|
512 "cp860", // JDK historical |
|
513 "ibm860", |
|
514 "ibm-860", |
|
515 "860", |
|
516 "csIBM860" |
|
517 }); |
|
518 charset("IBM861", "IBM861", |
|
519 new String[] { |
|
520 "cp861", // JDK historical |
|
521 "ibm861", |
|
522 "ibm-861", |
|
523 "861", |
|
524 "csIBM861", |
|
525 "cp-is" |
|
526 }); |
|
527 |
|
528 charset("IBM863", "IBM863", |
|
529 new String[] { |
|
530 "cp863", // JDK historical |
|
531 "ibm863", |
|
532 "ibm-863", |
|
533 "863", |
|
534 "csIBM863" |
|
535 }); |
|
536 |
|
537 charset("IBM864", "IBM864", |
|
538 new String[] { |
|
539 "cp864", // JDK historical |
|
540 "ibm864", |
|
541 "ibm-864", |
|
542 "864", |
|
543 "csIBM864" |
|
544 }); |
|
545 |
|
546 charset("IBM865", "IBM865", |
|
547 new String[] { |
|
548 "cp865", // JDK historical |
|
549 "ibm865", |
|
550 "ibm-865", |
|
551 "865", |
|
552 "csIBM865" |
|
553 }); |
|
554 |
|
555 charset("IBM868", "IBM868", |
|
556 new String[] { |
|
557 "cp868", // JDK historical |
|
558 "ibm868", |
|
559 "ibm-868", |
|
560 "868", |
|
561 "cp-ar", |
|
562 "csIBM868" |
|
563 }); |
|
564 |
|
565 charset("IBM869", "IBM869", |
|
566 new String[] { |
|
567 "cp869", // JDK historical |
|
568 "ibm869", |
|
569 "ibm-869", |
|
570 "869", |
|
571 "cp-gr", |
|
572 "csIBM869" |
|
573 }); |
|
574 |
|
575 charset("x-IBM921", "IBM921", |
|
576 new String[] { |
|
577 "cp921", // JDK historical |
|
578 "ibm921", |
|
579 "ibm-921", |
|
580 "921" |
|
581 }); |
|
582 |
|
583 charset("x-IBM1006", "IBM1006", |
|
584 new String[] { |
|
585 "cp1006", // JDK historical |
|
586 "ibm1006", |
|
587 "ibm-1006", |
|
588 "1006" |
|
589 }); |
|
590 |
|
591 charset("x-IBM1046", "IBM1046", |
|
592 new String[] { |
|
593 "cp1046", // JDK historical |
|
594 "ibm1046", |
|
595 "ibm-1046", |
|
596 "1046" |
|
597 }); |
|
598 |
|
599 charset("IBM1047", "IBM1047", |
|
600 new String[] { |
|
601 "cp1047", // JDK historical |
|
602 "ibm-1047", |
|
603 "1047" |
|
604 }); |
|
605 |
|
606 charset("x-IBM1098", "IBM1098", |
|
607 new String[] { |
|
608 "cp1098", // JDK historical |
|
609 "ibm1098", |
|
610 "ibm-1098", |
|
611 "1098", |
|
612 }); |
|
613 |
|
614 charset("IBM037", "IBM037", |
|
615 new String[] { |
|
616 "cp037", // JDK historical |
|
617 "ibm037", |
|
618 "ebcdic-cp-us", |
|
619 "ebcdic-cp-ca", |
|
620 "ebcdic-cp-wt", |
|
621 "ebcdic-cp-nl", |
|
622 "csIBM037", |
|
623 "cs-ebcdic-cp-us", |
|
624 "cs-ebcdic-cp-ca", |
|
625 "cs-ebcdic-cp-wt", |
|
626 "cs-ebcdic-cp-nl", |
|
627 "ibm-037", |
|
628 "ibm-37", |
|
629 "cpibm37", |
|
630 "037" |
|
631 }); |
|
632 |
|
633 charset("x-IBM1025", "IBM1025", |
|
634 new String[] { |
|
635 "cp1025", // JDK historical |
|
636 "ibm1025", |
|
637 "ibm-1025", |
|
638 "1025" |
|
639 }); |
|
640 |
|
641 charset("IBM1026", "IBM1026", |
|
642 new String[] { |
|
643 "cp1026", // JDK historical |
|
644 "ibm1026", |
|
645 "ibm-1026", |
|
646 "1026" |
|
647 }); |
|
648 |
|
649 charset("x-IBM1112", "IBM1112", |
|
650 new String[] { |
|
651 "cp1112", // JDK historical |
|
652 "ibm1112", |
|
653 "ibm-1112", |
|
654 "1112" |
|
655 }); |
|
656 |
|
657 charset("x-IBM1122", "IBM1122", |
|
658 new String[] { |
|
659 "cp1122", // JDK historical |
|
660 "ibm1122", |
|
661 "ibm-1122", |
|
662 "1122" |
|
663 }); |
|
664 |
|
665 charset("x-IBM1123", "IBM1123", |
|
666 new String[] { |
|
667 "cp1123", // JDK historical |
|
668 "ibm1123", |
|
669 "ibm-1123", |
|
670 "1123" |
|
671 }); |
|
672 |
|
673 charset("x-IBM1124", "IBM1124", |
|
674 new String[] { |
|
675 "cp1124", // JDK historical |
|
676 "ibm1124", |
|
677 "ibm-1124", |
|
678 "1124" |
|
679 }); |
|
680 |
|
681 charset("x-IBM1364", "IBM1364", |
|
682 new String[] { |
|
683 "cp1364", |
|
684 "ibm1364", |
|
685 "ibm-1364", |
|
686 "1364" |
|
687 }); |
|
688 |
|
689 charset("IBM273", "IBM273", |
|
690 new String[] { |
|
691 "cp273", // JDK historical |
|
692 "ibm273", |
|
693 "ibm-273", |
|
694 "273" |
|
695 }); |
|
696 |
|
697 charset("IBM277", "IBM277", |
|
698 new String[] { |
|
699 "cp277", // JDK historical |
|
700 "ibm277", |
|
701 "ibm-277", |
|
702 "277" |
|
703 }); |
|
704 |
|
705 charset("IBM278", "IBM278", |
|
706 new String[] { |
|
707 "cp278", // JDK historical |
|
708 "ibm278", |
|
709 "ibm-278", |
|
710 "278", |
|
711 "ebcdic-sv", |
|
712 "ebcdic-cp-se", |
|
713 "csIBM278" |
|
714 }); |
|
715 |
|
716 charset("IBM280", "IBM280", |
|
717 new String[] { |
|
718 "cp280", // JDK historical |
|
719 "ibm280", |
|
720 "ibm-280", |
|
721 "280" |
|
722 }); |
|
723 |
|
724 charset("IBM284", "IBM284", |
|
725 new String[] { |
|
726 "cp284", // JDK historical |
|
727 "ibm284", |
|
728 "ibm-284", |
|
729 "284", |
|
730 "csIBM284", |
|
731 "cpibm284" |
|
732 }); |
|
733 |
|
734 charset("IBM285", "IBM285", |
|
735 new String[] { |
|
736 "cp285", // JDK historical |
|
737 "ibm285", |
|
738 "ibm-285", |
|
739 "285", |
|
740 "ebcdic-cp-gb", |
|
741 "ebcdic-gb", |
|
742 "csIBM285", |
|
743 "cpibm285" |
|
744 }); |
|
745 |
|
746 charset("IBM297", "IBM297", |
|
747 new String[] { |
|
748 "cp297", // JDK historical |
|
749 "ibm297", |
|
750 "ibm-297", |
|
751 "297", |
|
752 "ebcdic-cp-fr", |
|
753 "cpibm297", |
|
754 "csIBM297", |
|
755 }); |
|
756 |
|
757 charset("IBM420", "IBM420", |
|
758 new String[] { |
|
759 "cp420", // JDK historical |
|
760 "ibm420", |
|
761 "ibm-420", |
|
762 "ebcdic-cp-ar1", |
|
763 "420", |
|
764 "csIBM420" |
|
765 }); |
|
766 |
|
767 charset("IBM424", "IBM424", |
|
768 new String[] { |
|
769 "cp424", // JDK historical |
|
770 "ibm424", |
|
771 "ibm-424", |
|
772 "424", |
|
773 "ebcdic-cp-he", |
|
774 "csIBM424" |
|
775 }); |
|
776 |
|
777 charset("IBM500", "IBM500", |
|
778 new String[] { |
|
779 "cp500", // JDK historical |
|
780 "ibm500", |
|
781 "ibm-500", |
|
782 "500", |
|
783 "ebcdic-cp-ch", |
|
784 "ebcdic-cp-bh", |
|
785 "csIBM500" |
|
786 }); |
|
787 |
|
788 charset("x-IBM833", "IBM833", |
|
789 new String[] { |
|
790 "cp833", |
|
791 "ibm833", |
|
792 "ibm-833" |
|
793 }); |
|
794 |
|
795 //EBCDIC DBCS-only Korean |
|
796 charset("x-IBM834", "IBM834", |
|
797 new String[] { |
|
798 "cp834", |
|
799 "ibm834", |
|
800 "834", |
|
801 "ibm-834" |
|
802 }); |
|
803 |
|
804 |
|
805 charset("IBM-Thai", "IBM838", |
|
806 new String[] { |
|
807 "cp838", // JDK historical |
|
808 "ibm838", |
|
809 "ibm-838", |
|
810 "838" |
|
811 }); |
|
812 |
|
813 charset("IBM870", "IBM870", |
|
814 new String[] { |
|
815 "cp870", // JDK historical |
|
816 "ibm870", |
|
817 "ibm-870", |
|
818 "870", |
|
819 "ebcdic-cp-roece", |
|
820 "ebcdic-cp-yu", |
|
821 "csIBM870" |
|
822 }); |
|
823 |
|
824 charset("IBM871", "IBM871", |
|
825 new String[] { |
|
826 "cp871", // JDK historical |
|
827 "ibm871", |
|
828 "ibm-871", |
|
829 "871", |
|
830 "ebcdic-cp-is", |
|
831 "csIBM871" |
|
832 }); |
|
833 |
|
834 charset("x-IBM875", "IBM875", |
|
835 new String[] { |
|
836 "cp875", // JDK historical |
|
837 "ibm875", |
|
838 "ibm-875", |
|
839 "875" |
|
840 }); |
|
841 |
|
842 charset("IBM918", "IBM918", |
|
843 new String[] { |
|
844 "cp918", // JDK historical |
|
845 "ibm-918", |
|
846 "918", |
|
847 "ebcdic-cp-ar2" |
|
848 }); |
|
849 |
|
850 charset("x-IBM922", "IBM922", |
|
851 new String[] { |
|
852 "cp922", // JDK historical |
|
853 "ibm922", |
|
854 "ibm-922", |
|
855 "922" |
|
856 }); |
|
857 |
|
858 charset("x-IBM1097", "IBM1097", |
|
859 new String[] { |
|
860 "cp1097", // JDK historical |
|
861 "ibm1097", |
|
862 "ibm-1097", |
|
863 "1097" |
|
864 }); |
|
865 |
|
866 charset("x-IBM949", "IBM949", |
|
867 new String[] { |
|
868 "cp949", // JDK historical |
|
869 "ibm949", |
|
870 "ibm-949", |
|
871 "949" |
|
872 }); |
|
873 |
|
874 charset("x-IBM949C", "IBM949C", |
|
875 new String[] { |
|
876 "cp949C", // JDK historical |
|
877 "ibm949C", |
|
878 "ibm-949C", |
|
879 "949C" |
|
880 }); |
|
881 |
|
882 charset("x-IBM939", "IBM939", |
|
883 new String[] { |
|
884 "cp939", // JDK historical |
|
885 "ibm939", |
|
886 "ibm-939", |
|
887 "939" |
|
888 }); |
|
889 |
|
890 charset("x-IBM933", "IBM933", |
|
891 new String[] { |
|
892 "cp933", // JDK historical |
|
893 "ibm933", |
|
894 "ibm-933", |
|
895 "933" |
|
896 }); |
|
897 |
|
898 charset("x-IBM1381", "IBM1381", |
|
899 new String[] { |
|
900 "cp1381", // JDK historical |
|
901 "ibm1381", |
|
902 "ibm-1381", |
|
903 "1381" |
|
904 }); |
|
905 |
|
906 charset("x-IBM1383", "IBM1383", |
|
907 new String[] { |
|
908 "cp1383", // JDK historical |
|
909 "ibm1383", |
|
910 "ibm-1383", |
|
911 "1383" |
|
912 }); |
|
913 |
|
914 charset("x-IBM970", "IBM970", |
|
915 new String[] { |
|
916 "cp970", // JDK historical |
|
917 "ibm970", |
|
918 "ibm-970", |
|
919 "ibm-eucKR", |
|
920 "970" |
|
921 }); |
|
922 |
|
923 charset("x-IBM964", "IBM964", |
|
924 new String[] { |
|
925 "cp964", // JDK historical |
|
926 "ibm964", |
|
927 "ibm-964", |
|
928 "964" |
|
929 }); |
|
930 |
|
931 charset("x-IBM33722", "IBM33722", |
|
932 new String[] { |
|
933 "cp33722", // JDK historical |
|
934 "ibm33722", |
|
935 "ibm-33722", |
|
936 "ibm-5050", // from IBM alias list |
|
937 "ibm-33722_vascii_vpua", // from IBM alias list |
|
938 "33722" |
|
939 }); |
|
940 |
|
941 charset("IBM01140", "IBM1140", |
|
942 new String[] { |
|
943 "cp1140", // JDK historical |
|
944 "ccsid01140", |
|
945 "cp01140", |
|
946 "1140", |
|
947 "ebcdic-us-037+euro" |
|
948 }); |
|
949 |
|
950 charset("IBM01141", "IBM1141", |
|
951 new String[] { |
|
952 "cp1141", // JDK historical |
|
953 "ccsid01141", |
|
954 "cp01141", |
|
955 "1141", |
|
956 "ebcdic-de-273+euro" |
|
957 }); |
|
958 |
|
959 charset("IBM01142", "IBM1142", |
|
960 new String[] { |
|
961 "cp1142", // JDK historical |
|
962 "ccsid01142", |
|
963 "cp01142", |
|
964 "1142", |
|
965 "ebcdic-no-277+euro", |
|
966 "ebcdic-dk-277+euro" |
|
967 }); |
|
968 |
|
969 charset("IBM01143", "IBM1143", |
|
970 new String[] { |
|
971 "cp1143", // JDK historical |
|
972 "ccsid01143", |
|
973 "cp01143", |
|
974 "1143", |
|
975 "ebcdic-fi-278+euro", |
|
976 "ebcdic-se-278+euro" |
|
977 }); |
|
978 |
|
979 charset("IBM01144", "IBM1144", |
|
980 new String[] { |
|
981 "cp1144", // JDK historical |
|
982 "ccsid01144", |
|
983 "cp01144", |
|
984 "1144", |
|
985 "ebcdic-it-280+euro" |
|
986 }); |
|
987 |
|
988 charset("IBM01145", "IBM1145", |
|
989 new String[] { |
|
990 "cp1145", // JDK historical |
|
991 "ccsid01145", |
|
992 "cp01145", |
|
993 "1145", |
|
994 "ebcdic-es-284+euro" |
|
995 }); |
|
996 |
|
997 charset("IBM01146", "IBM1146", |
|
998 new String[] { |
|
999 "cp1146", // JDK historical |
|
1000 "ccsid01146", |
|
1001 "cp01146", |
|
1002 "1146", |
|
1003 "ebcdic-gb-285+euro" |
|
1004 }); |
|
1005 |
|
1006 charset("IBM01147", "IBM1147", |
|
1007 new String[] { |
|
1008 "cp1147", // JDK historical |
|
1009 "ccsid01147", |
|
1010 "cp01147", |
|
1011 "1147", |
|
1012 "ebcdic-fr-277+euro" |
|
1013 }); |
|
1014 |
|
1015 charset("IBM01148", "IBM1148", |
|
1016 new String[] { |
|
1017 "cp1148", // JDK historical |
|
1018 "ccsid01148", |
|
1019 "cp01148", |
|
1020 "1148", |
|
1021 "ebcdic-international-500+euro" |
|
1022 }); |
|
1023 |
|
1024 charset("IBM01149", "IBM1149", |
|
1025 new String[] { |
|
1026 "cp1149", // JDK historical |
|
1027 "ccsid01149", |
|
1028 "cp01149", |
|
1029 "1149", |
|
1030 "ebcdic-s-871+euro" |
|
1031 }); |
|
1032 |
|
1033 charset("IBM290", "IBM290", |
|
1034 new String[] { |
|
1035 "cp290", |
|
1036 "ibm290", |
|
1037 "ibm-290", |
|
1038 "csIBM290", |
|
1039 "EBCDIC-JP-kana", |
|
1040 "290" |
|
1041 }); |
|
1042 |
|
1043 charset("x-IBM300", "IBM300", |
|
1044 new String[] { |
|
1045 "cp300", |
|
1046 "ibm300", |
|
1047 "ibm-300", |
|
1048 "300" |
|
1049 }); |
|
1050 |
|
1051 // Macintosh MacOS/Apple char encodingd |
|
1052 |
|
1053 |
|
1054 charset("x-MacRoman", "MacRoman", |
|
1055 new String[] { |
|
1056 "MacRoman" // JDK historical |
|
1057 }); |
|
1058 |
|
1059 charset("x-MacCentralEurope", "MacCentralEurope", |
|
1060 new String[] { |
|
1061 "MacCentralEurope" // JDK historical |
|
1062 }); |
|
1063 |
|
1064 charset("x-MacCroatian", "MacCroatian", |
|
1065 new String[] { |
|
1066 "MacCroatian" // JDK historical |
|
1067 }); |
|
1068 |
|
1069 |
|
1070 charset("x-MacGreek", "MacGreek", |
|
1071 new String[] { |
|
1072 "MacGreek" // JDK historical |
|
1073 }); |
|
1074 |
|
1075 charset("x-MacCyrillic", "MacCyrillic", |
|
1076 new String[] { |
|
1077 "MacCyrillic" // JDK historical |
|
1078 }); |
|
1079 |
|
1080 charset("x-MacUkraine", "MacUkraine", |
|
1081 new String[] { |
|
1082 "MacUkraine" // JDK historical |
|
1083 }); |
|
1084 |
|
1085 charset("x-MacTurkish", "MacTurkish", |
|
1086 new String[] { |
|
1087 "MacTurkish" // JDK historical |
|
1088 }); |
|
1089 |
|
1090 charset("x-MacArabic", "MacArabic", |
|
1091 new String[] { |
|
1092 "MacArabic" // JDK historical |
|
1093 }); |
|
1094 |
|
1095 charset("x-MacHebrew", "MacHebrew", |
|
1096 new String[] { |
|
1097 "MacHebrew" // JDK historical |
|
1098 }); |
|
1099 |
|
1100 charset("x-MacIceland", "MacIceland", |
|
1101 new String[] { |
|
1102 "MacIceland" // JDK historical |
|
1103 }); |
|
1104 |
|
1105 charset("x-MacRomania", "MacRomania", |
|
1106 new String[] { |
|
1107 "MacRomania" // JDK historical |
|
1108 }); |
|
1109 |
|
1110 charset("x-MacThai", "MacThai", |
|
1111 new String[] { |
|
1112 "MacThai" // JDK historical |
|
1113 }); |
|
1114 |
|
1115 charset("x-MacSymbol", "MacSymbol", |
|
1116 new String[] { |
|
1117 "MacSymbol" // JDK historical |
|
1118 }); |
|
1119 |
|
1120 charset("x-MacDingbat", "MacDingbat", |
|
1121 new String[] { |
|
1122 "MacDingbat" // JDK historical |
|
1123 }); |
|
1124 |
|
1125 instance = this; |
|
1126 |
|
1127 } |
|
1128 |
|
1129 private boolean initialized = false; |
|
1130 |
|
1131 // If the sun.nio.cs.map property is defined on the command line we won't |
|
1132 // see it in the system-properties table until after the charset subsystem |
|
1133 // has been initialized. We therefore delay the effect of this property |
|
1134 // until after the JRE has completely booted. |
|
1135 // |
|
1136 // At the moment following values for this property are supported, property |
|
1137 // value string is case insensitive. |
|
1138 // |
|
1139 // (1)"Windows-31J/Shift_JIS" |
|
1140 // In 1.4.1 we added a correct implementation of the Shift_JIS charset |
|
1141 // but in previous releases this charset name had been treated as an alias |
|
1142 // for Windows-31J, aka MS932. Users who have existing code that depends |
|
1143 // upon this alias can restore the previous behavior by defining this |
|
1144 // property to have this value. |
|
1145 // |
|
1146 // (2)"x-windows-50221/ISO-2022-JP" |
|
1147 // "x-windows-50220/ISO-2022-JP" |
|
1148 // "x-windows-iso2022jp/ISO-2022-JP" |
|
1149 // The charset ISO-2022-JP is a "standard based" implementation by default, |
|
1150 // which supports ASCII, JIS_X_0201 and JIS_X_0208 mappings based encoding |
|
1151 // and decoding only. |
|
1152 // There are three Microsoft iso-2022-jp variants, namely x-windows-50220, |
|
1153 // x-windows-50221 and x-windows-iso2022jp which behaves "slightly" differently |
|
1154 // compared to the "standard based" implementation. See ISO2022_JP.java for |
|
1155 // detailed description. Users who prefer the behavior of MS iso-2022-jp |
|
1156 // variants should use these names explicitly instead of using "ISO-2022-JP" |
|
1157 // and its aliases. However for those who need the ISO-2022-JP charset behaves |
|
1158 // exactly the same as MS variants do, above properties can be defined to |
|
1159 // switch. |
|
1160 // |
|
1161 // If we need to define other charset-alias mappings in the future then |
|
1162 // this property could be further extended, the general idea being that its |
|
1163 // value should be of the form |
|
1164 // |
|
1165 // new-charset-1/old-charset-1,new-charset-2/old-charset-2,... |
|
1166 // |
|
1167 // where each charset named to the left of a slash is intended to replace |
|
1168 // (most) uses of the charset named to the right of the slash. |
|
1169 // |
|
1170 protected void init() { |
|
1171 if (initialized) |
|
1172 return; |
|
1173 if (!sun.misc.VM.isBooted()) |
|
1174 return; |
|
1175 |
|
1176 String map = getProperty("sun.nio.cs.map"); |
|
1177 boolean sjisIsMS932 = false; |
|
1178 boolean iso2022jpIsMS50221 = false; |
|
1179 boolean iso2022jpIsMS50220 = false; |
|
1180 boolean iso2022jpIsMSISO2022JP = false; |
|
1181 if (map != null) { |
|
1182 String[] maps = map.split(","); |
|
1183 for (int i = 0; i < maps.length; i++) { |
|
1184 if (maps[i].equalsIgnoreCase("Windows-31J/Shift_JIS")) { |
|
1185 sjisIsMS932 = true; |
|
1186 } else if (maps[i].equalsIgnoreCase("x-windows-50221/ISO-2022-JP")) { |
|
1187 iso2022jpIsMS50221 = true; |
|
1188 } else if (maps[i].equalsIgnoreCase("x-windows-50220/ISO-2022-JP")) { |
|
1189 iso2022jpIsMS50220 = true; |
|
1190 } else if (maps[i].equalsIgnoreCase("x-windows-iso2022jp/ISO-2022-JP")) { |
|
1191 iso2022jpIsMSISO2022JP = true; |
|
1192 } |
|
1193 } |
|
1194 } |
|
1195 if (sjisIsMS932) { |
|
1196 deleteCharset("Shift_JIS", |
|
1197 new String[] { |
|
1198 // IANA aliases |
|
1199 "sjis", // historical |
|
1200 "shift_jis", |
|
1201 "shift-jis", |
|
1202 "ms_kanji", |
|
1203 "x-sjis", |
|
1204 "csShiftJIS" |
|
1205 }); |
|
1206 deleteCharset("windows-31j", |
|
1207 new String[] { |
|
1208 "MS932", // JDK historical |
|
1209 "windows-932", |
|
1210 "csWindows31J" |
|
1211 }); |
|
1212 charset("Shift_JIS", "SJIS", |
|
1213 new String[] { |
|
1214 // IANA aliases |
|
1215 "sjis" // JDK historical |
|
1216 }); |
|
1217 charset("windows-31j", "MS932", |
|
1218 new String[] { |
|
1219 "MS932", // JDK historical |
|
1220 "windows-932", |
|
1221 "csWindows31J", |
|
1222 "shift-jis", |
|
1223 "ms_kanji", |
|
1224 "x-sjis", |
|
1225 "csShiftJIS", |
|
1226 // This alias takes precedence over the actual |
|
1227 // Shift_JIS charset itself since aliases are always |
|
1228 // resolved first, before looking up canonical names. |
|
1229 "shift_jis" |
|
1230 }); |
|
1231 } |
|
1232 if (iso2022jpIsMS50221 || |
|
1233 iso2022jpIsMS50220 || |
|
1234 iso2022jpIsMSISO2022JP) { |
|
1235 deleteCharset("ISO-2022-JP", |
|
1236 new String[] { |
|
1237 "iso2022jp", |
|
1238 "jis", |
|
1239 "csISO2022JP", |
|
1240 "jis_encoding", |
|
1241 "csjisencoding" |
|
1242 }); |
|
1243 if (iso2022jpIsMS50221) { |
|
1244 deleteCharset("x-windows-50221", |
|
1245 new String[] { |
|
1246 "cp50221", |
|
1247 "ms50221" |
|
1248 }); |
|
1249 charset("x-windows-50221", "MS50221", |
|
1250 new String[] { |
|
1251 "cp50221", |
|
1252 "ms50221", |
|
1253 "iso-2022-jp", |
|
1254 "iso2022jp", |
|
1255 "jis", |
|
1256 "csISO2022JP", |
|
1257 "jis_encoding", |
|
1258 "csjisencoding" |
|
1259 }); |
|
1260 } else if (iso2022jpIsMS50220) { |
|
1261 deleteCharset("x-windows-50220", |
|
1262 new String[] { |
|
1263 "cp50220", |
|
1264 "ms50220" |
|
1265 }); |
|
1266 charset("x-windows-50220", "MS50220", |
|
1267 new String[] { |
|
1268 "cp50220", |
|
1269 "ms50220", |
|
1270 "iso-2022-jp", |
|
1271 "iso2022jp", |
|
1272 "jis", |
|
1273 "csISO2022JP", |
|
1274 "jis_encoding", |
|
1275 "csjisencoding" |
|
1276 }); |
|
1277 } else { |
|
1278 deleteCharset("x-windows-iso2022jp", |
|
1279 new String[] { |
|
1280 "windows-iso2022jp" |
|
1281 }); |
|
1282 charset("x-windows-iso2022jp", "MSISO2022JP", |
|
1283 new String[] { |
|
1284 "windows-iso2022jp", |
|
1285 "iso-2022-jp", |
|
1286 "iso2022jp", |
|
1287 "jis", |
|
1288 "csISO2022JP", |
|
1289 "jis_encoding", |
|
1290 "csjisencoding" |
|
1291 }); |
|
1292 |
|
1293 |
|
1294 } |
|
1295 } |
|
1296 String osName = getProperty("os.name"); |
|
1297 if ("SunOS".equals(osName) || "Linux".equals(osName) || "AIX".equals(osName) |
|
1298 || osName.contains("OS X")) { |
|
1299 charset("x-COMPOUND_TEXT", "COMPOUND_TEXT", |
|
1300 new String[] { |
|
1301 "COMPOUND_TEXT", // JDK historical |
|
1302 "x11-compound_text", |
|
1303 "x-compound-text" |
|
1304 }); |
|
1305 } |
|
1306 initialized = true; |
|
1307 } |
|
1308 |
|
1309 private static String getProperty(String key) { |
|
1310 // this method may be called during initialization of |
|
1311 // system class loader and thus not using lambda |
|
1312 return AccessController.doPrivileged( |
|
1313 new PrivilegedAction<String>() { |
|
1314 @Override |
|
1315 public String run() { |
|
1316 return System.getProperty(key); |
|
1317 } |
|
1318 }); |
|
1319 } |
|
1320 |
|
1321 public static String[] aliasesFor(String charsetName) { |
|
1322 if (instance == null) |
|
1323 return null; |
|
1324 return instance.aliases(charsetName); |
|
1325 } |
|
1326 } |