/* * Copyright 2002-2008 Sun Microsystems, Inc. All Rights Reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License version 2 only, as * published by the Free Software Foundation. Sun designates this * particular file as subject to the "Classpath" exception as provided * by Sun in the LICENSE file that accompanied this code. * * This code is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License * version 2 for more details (a copy is included in the LICENSE file that * accompanied this code). * * You should have received a copy of the GNU General Public License version * 2 along with this work; if not, write to the Free Software Foundation, * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. * * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara, * CA 95054 USA or visit www.sun.com if you need additional information or * have any questions. */ package sun.nio.cs.ext; import java.lang.ref.SoftReference; import java.nio.charset.Charset; import java.nio.charset.spi.CharsetProvider; import sun.nio.cs.AbstractCharsetProvider; import java.security.AccessController; import sun.security.action.GetPropertyAction; /** * Provider for extended charsets. */ public class ExtendedCharsets extends AbstractCharsetProvider { static volatile ExtendedCharsets instance = null; public ExtendedCharsets() { super("sun.nio.cs.ext"); // identify provider pkg name. // Traditional Chinese charset("Big5", "Big5", new String[] { // IANA aliases "csBig5" }); charset("x-MS950-HKSCS", "MS950_HKSCS", new String[] { // IANA aliases "MS950_HKSCS" // JDK historical; }); charset("x-windows-950", "MS950", new String[] { "ms950", // JDK historical "windows-950" }); charset("x-windows-874", "MS874", new String[] { "ms874", // JDK historical "ms-874", "windows-874" }); charset("x-EUC-TW", "EUC_TW", new String[] { "euc_tw", // JDK historical "euctw", "cns11643", "EUC-TW" }); charset("Big5-HKSCS", "Big5_HKSCS", new String[] { "Big5_HKSCS", // JDK historical "big5hk", "big5-hkscs", "big5-hkscs:unicode3.0", "big5hkscs" // Linux alias }); charset("x-Big5-Solaris", "Big5_Solaris", new String[] { "Big5_Solaris", // JDK historical }); // Simplified Chinese charset("GBK", "GBK", new String[] { "windows-936", "CP936" }); charset("GB18030", "GB18030", new String[] { "gb18030-2000" }); charset("GB2312", "EUC_CN", new String[] { // IANA aliases "gb2312", "gb2312-80", "gb2312-1980", "euc-cn", "euccn", "x-EUC-CN", // 1.4 compatability "EUC_CN" //JDK historical }); charset("x-mswin-936", "MS936", new String[] { "ms936", // historical // IANA aliases "ms_936" }); // The definition of this charset may be overridden by the init method, // below, if the sun.nio.cs.map property is defined. // charset("Shift_JIS", "SJIS", new String[] { // IANA aliases "sjis", // historical "shift_jis", "shift-jis", "ms_kanji", "x-sjis", "csShiftJIS" }); // The definition of this charset may be overridden by the init method, // below, if the sun.nio.cs.map property is defined. // charset("windows-31j", "MS932", new String[] { "MS932", // JDK historical "windows-932", "csWindows31J" }); charset("JIS_X0201", "JIS_X_0201", new String[] { "JIS0201", // JDK historical // IANA aliases "JIS_X0201", "X0201", "csHalfWidthKatakana" }); charset("x-JIS0208", "JIS_X_0208", new String[] { "JIS0208", // JDK historical // IANA aliases "JIS_C6226-1983", "iso-ir-87", "x0208", "JIS_X0208-1983", "csISO87JISX0208" }); charset("JIS_X0212-1990", "JIS_X_0212", new String[] { "JIS0212", // JDK historical // IANA aliases "jis_x0212-1990", "x0212", "iso-ir-159", "csISO159JISX02121990" }); charset("x-SJIS_0213", "SJIS_0213", new String[] { "sjis-0213", "sjis_0213", "sjis:2004", "sjis_0213:2004", "shift_jis_0213:2004", "shift_jis:2004" }); charset("x-MS932_0213", "MS932_0213", new String[] { "MS932-0213", "MS932_0213", "MS932:2004", "windows-932-0213", "windows-932:2004" }); charset("EUC-JP", "EUC_JP", new String[] { "euc_jp", // JDK historical // IANA aliases "eucjis", "eucjp", "Extended_UNIX_Code_Packed_Format_for_Japanese", "csEUCPkdFmtjapanese", "x-euc-jp", "x-eucjp" }); charset("x-euc-jp-linux", "EUC_JP_LINUX", new String[] { "euc_jp_linux", // JDK historical "euc-jp-linux" }); charset("x-eucjp-open", "EUC_JP_Open", new String[] { "EUC_JP_Solaris", // JDK historical "eucJP-open" }); charset("x-PCK", "PCK", new String[] { // IANA aliases "pck" // historical }); charset("ISO-2022-JP", "ISO2022_JP", new String[] { // IANA aliases "iso2022jp", // historical "jis", "csISO2022JP", "jis_encoding", "csjisencoding" }); charset("ISO-2022-JP-2", "ISO2022_JP_2", new String[] { // IANA aliases "csISO2022JP2", "iso2022jp2" }); charset("x-windows-50221", "MS50221", new String[] { "ms50221", // historical "cp50221", }); charset("x-windows-50220", "MS50220", new String[] { "ms50220", // historical "cp50220", }); charset("x-windows-iso2022jp", "MSISO2022JP", new String[] { "windows-iso2022jp", // historical }); charset("x-JISAutoDetect", "JISAutoDetect", new String[] { "JISAutoDetect" // historical }); // Korean charset("EUC-KR", "EUC_KR", new String[] { "euc_kr", // JDK historical // IANA aliases "ksc5601", "euckr", "ks_c_5601-1987", "ksc5601-1987", "ksc5601_1987", "ksc_5601", "csEUCKR", "5601" }); charset("x-windows-949", "MS949", new String[] { "ms949", // JDK historical "windows949", "windows-949", // IANA aliases "ms_949" }); charset("x-Johab", "Johab", new String[] { "ksc5601-1992", "ksc5601_1992", "ms1361", "johab" // JDK historical }); charset("ISO-2022-KR", "ISO2022_KR", new String[] { "ISO2022KR", // JDK historical "csISO2022KR" }); charset("ISO-2022-CN", "ISO2022_CN", new String[] { "ISO2022CN", // JDK historical "csISO2022CN" }); charset("x-ISO-2022-CN-CNS", "ISO2022_CN_CNS", new String[] { "ISO2022CN_CNS", // JDK historical "ISO-2022-CN-CNS" }); charset("x-ISO-2022-CN-GB", "ISO2022_CN_GB", new String[] { "ISO2022CN_GB", // JDK historical "ISO-2022-CN-GB" }); charset("x-ISCII91", "ISCII91", new String[] { "iscii", "ST_SEV_358-88", "iso-ir-153", "csISO153GOST1976874", "ISCII91" // JDK historical }); charset("ISO-8859-3", "ISO_8859_3", new String[] { "iso8859_3", // JDK historical "8859_3", "ISO_8859-3:1988", "iso-ir-109", "ISO_8859-3", "ISO8859-3", "latin3", "l3", "ibm913", "ibm-913", "cp913", "913", "csISOLatin3" }); charset("ISO-8859-6", "ISO_8859_6", new String[] { "iso8859_6", // JDK historical "8859_6", "iso-ir-127", "ISO_8859-6", "ISO_8859-6:1987", "ISO8859-6", "ECMA-114", "ASMO-708", "arabic", "ibm1089", "ibm-1089", "cp1089", "1089", "csISOLatinArabic" }); charset("ISO-8859-8", "ISO_8859_8", new String[] { "iso8859_8", // JDK historical "8859_8", "iso-ir-138", "ISO_8859-8", "ISO_8859-8:1988", "ISO8859-8", "cp916", "916", "ibm916", "ibm-916", "hebrew", "csISOLatinHebrew" }); charset("x-ISO-8859-11", "ISO_8859_11", new String[] { "iso-8859-11", "iso8859_11" }); charset("TIS-620", "TIS_620", new String[] { "tis620", // JDK historical "tis620.2533" }); // Various Microsoft Windows international codepages charset("windows-1255", "MS1255", new String[] { "cp1255" // JDK historical }); charset("windows-1256", "MS1256", new String[] { "cp1256" // JDK historical }); charset("windows-1258", "MS1258", new String[] { "cp1258" // JDK historical }); // IBM & PC/MSDOS encodings charset("x-IBM942", "IBM942", new String[] { "cp942", // JDK historical "ibm942", "ibm-942", "942" }); charset("x-IBM942C", "IBM942C", new String[] { "cp942C", // JDK historical "ibm942C", "ibm-942C", "942C" }); charset("x-IBM943", "IBM943", new String[] { "cp943", // JDK historical "ibm943", "ibm-943", "943" }); charset("x-IBM943C", "IBM943C", new String[] { "cp943C", // JDK historical "ibm943C", "ibm-943C", "943C" }); charset("x-IBM948", "IBM948", new String[] { "cp948", // JDK historical "ibm948", "ibm-948", "948" }); charset("x-IBM950", "IBM950", new String[] { "cp950", // JDK historical "ibm950", "ibm-950", "950" }); charset("x-IBM930", "IBM930", new String[] { "cp930", // JDK historical "ibm930", "ibm-930", "930" }); charset("x-IBM935", "IBM935", new String[] { "cp935", // JDK historical "ibm935", "ibm-935", "935" }); charset("x-IBM937", "IBM937", new String[] { "cp937", // JDK historical "ibm937", "ibm-937", "937" }); charset("x-IBM856", "IBM856", new String[] { "cp856", // JDK historical "ibm-856", "ibm856", "856" }); charset("IBM860", "IBM860", new String[] { "cp860", // JDK historical "ibm860", "ibm-860", "860", "csIBM860" }); charset("IBM861", "IBM861", new String[] { "cp861", // JDK historical "ibm861", "ibm-861", "861", "csIBM861", "cp-is" }); charset("IBM863", "IBM863", new String[] { "cp863", // JDK historical "ibm863", "ibm-863", "863", "csIBM863" }); charset("IBM864", "IBM864", new String[] { "cp864", // JDK historical "ibm864", "ibm-864", "864", "csIBM864" }); charset("IBM865", "IBM865", new String[] { "cp865", // JDK historical "ibm865", "ibm-865", "865", "csIBM865" }); charset("IBM868", "IBM868", new String[] { "cp868", // JDK historical "ibm868", "ibm-868", "868", "cp-ar", "csIBM868" }); charset("IBM869", "IBM869", new String[] { "cp869", // JDK historical "ibm869", "ibm-869", "869", "cp-gr", "csIBM869" }); charset("x-IBM921", "IBM921", new String[] { "cp921", // JDK historical "ibm921", "ibm-921", "921" }); charset("x-IBM1006", "IBM1006", new String[] { "cp1006", // JDK historical "ibm1006", "ibm-1006", "1006" }); charset("x-IBM1046", "IBM1046", new String[] { "cp1046", // JDK historical "ibm1046", "ibm-1046", "1046" }); charset("IBM1047", "IBM1047", new String[] { "cp1047", // JDK historical "ibm-1047", "1047" }); charset("x-IBM1098", "IBM1098", new String[] { "cp1098", // JDK historical "ibm1098", "ibm-1098", "1098", }); charset("IBM037", "IBM037", new String[] { "cp037", // JDK historical "ibm037", "ebcdic-cp-us", "ebcdic-cp-ca", "ebcdic-cp-wt", "ebcdic-cp-nl", "csIBM037", "cs-ebcdic-cp-us", "cs-ebcdic-cp-ca", "cs-ebcdic-cp-wt", "cs-ebcdic-cp-nl", "ibm-037", "ibm-37", "cpibm37", "037" }); charset("x-IBM1025", "IBM1025", new String[] { "cp1025", // JDK historical "ibm1025", "ibm-1025", "1025" }); charset("IBM1026", "IBM1026", new String[] { "cp1026", // JDK historical "ibm1026", "ibm-1026", "1026" }); charset("x-IBM1112", "IBM1112", new String[] { "cp1112", // JDK historical "ibm1112", "ibm-1112", "1112" }); charset("x-IBM1122", "IBM1122", new String[] { "cp1122", // JDK historical "ibm1122", "ibm-1122", "1122" }); charset("x-IBM1123", "IBM1123", new String[] { "cp1123", // JDK historical "ibm1123", "ibm-1123", "1123" }); charset("x-IBM1124", "IBM1124", new String[] { "cp1124", // JDK historical "ibm1124", "ibm-1124", "1124" }); charset("IBM273", "IBM273", new String[] { "cp273", // JDK historical "ibm273", "ibm-273", "273" }); charset("IBM277", "IBM277", new String[] { "cp277", // JDK historical "ibm277", "ibm-277", "277" }); charset("IBM278", "IBM278", new String[] { "cp278", // JDK historical "ibm278", "ibm-278", "278", "ebcdic-sv", "ebcdic-cp-se", "csIBM278" }); charset("IBM280", "IBM280", new String[] { "cp280", // JDK historical "ibm280", "ibm-280", "280" }); charset("IBM284", "IBM284", new String[] { "cp284", // JDK historical "ibm284", "ibm-284", "284", "csIBM284", "cpibm284" }); charset("IBM285", "IBM285", new String[] { "cp285", // JDK historical "ibm285", "ibm-285", "285", "ebcdic-cp-gb", "ebcdic-gb", "csIBM285", "cpibm285" }); charset("IBM297", "IBM297", new String[] { "cp297", // JDK historical "ibm297", "ibm-297", "297", "ebcdic-cp-fr", "cpibm297", "csIBM297", }); charset("IBM420", "IBM420", new String[] { "cp420", // JDK historical "ibm420", "ibm-420", "ebcdic-cp-ar1", "420", "csIBM420" }); charset("IBM424", "IBM424", new String[] { "cp424", // JDK historical "ibm424", "ibm-424", "424", "ebcdic-cp-he", "csIBM424" }); charset("IBM500", "IBM500", new String[] { "cp500", // JDK historical "ibm500", "ibm-500", "500", "ebcdic-cp-ch", "ebcdic-cp-bh", "csIBM500" }); //EBCDIC DBCS-only Korean charset("x-IBM834", "IBM834", new String[] { "cp834", "ibm834", "ibm-834" }); charset("IBM-Thai", "IBM838", new String[] { "cp838", // JDK historical "ibm838", "ibm-838", "838" }); charset("IBM870", "IBM870", new String[] { "cp870", // JDK historical "ibm870", "ibm-870", "870", "ebcdic-cp-roece", "ebcdic-cp-yu", "csIBM870" }); charset("IBM871", "IBM871", new String[] { "cp871", // JDK historical "ibm871", "ibm-871", "871", "ebcdic-cp-is", "csIBM871" }); charset("x-IBM875", "IBM875", new String[] { "cp875", // JDK historical "ibm875", "ibm-875", "875" }); charset("IBM918", "IBM918", new String[] { "cp918", // JDK historical "ibm-918", "918", "ebcdic-cp-ar2" }); charset("x-IBM922", "IBM922", new String[] { "cp922", // JDK historical "ibm922", "ibm-922", "922" }); charset("x-IBM1097", "IBM1097", new String[] { "cp1097", // JDK historical "ibm1097", "ibm-1097", "1097" }); charset("x-IBM949", "IBM949", new String[] { "cp949", // JDK historical "ibm949", "ibm-949", "949" }); charset("x-IBM949C", "IBM949C", new String[] { "cp949C", // JDK historical "ibm949C", "ibm-949C", "949C" }); charset("x-IBM939", "IBM939", new String[] { "cp939", // JDK historical "ibm939", "ibm-939", "939" }); charset("x-IBM933", "IBM933", new String[] { "cp933", // JDK historical "ibm933", "ibm-933", "933" }); charset("x-IBM1381", "IBM1381", new String[] { "cp1381", // JDK historical "ibm1381", "ibm-1381", "1381" }); charset("x-IBM1383", "IBM1383", new String[] { "cp1383", // JDK historical "ibm1383", "ibm-1383", "1383" }); charset("x-IBM970", "IBM970", new String[] { "cp970", // JDK historical "ibm970", "ibm-970", "ibm-eucKR", "970" }); charset("x-IBM964", "IBM964", new String[] { "cp964", // JDK historical "ibm964", "ibm-964", "964" }); charset("x-IBM33722", "IBM33722", new String[] { "cp33722", // JDK historical "ibm33722", "ibm-33722", "ibm-5050", // from IBM alias list "ibm-33722_vascii_vpua", // from IBM alias list "33722" }); charset("IBM01140", "IBM1140", new String[] { "cp1140", // JDK historical "ccsid01140", "cp01140", "1140", "ebcdic-us-037+euro" }); charset("IBM01141", "IBM1141", new String[] { "cp1141", // JDK historical "ccsid01141", "cp01141", "1141", "ebcdic-de-273+euro" }); charset("IBM01142", "IBM1142", new String[] { "cp1142", // JDK historical "ccsid01142", "cp01142", "1142", "ebcdic-no-277+euro", "ebcdic-dk-277+euro" }); charset("IBM01143", "IBM1143", new String[] { "cp1143", // JDK historical "ccsid01143", "cp01143", "1143", "ebcdic-fi-278+euro", "ebcdic-se-278+euro" }); charset("IBM01144", "IBM1144", new String[] { "cp1144", // JDK historical "ccsid01144", "cp01144", "1144", "ebcdic-it-280+euro" }); charset("IBM01145", "IBM1145", new String[] { "cp1145", // JDK historical "ccsid01145", "cp01145", "1145", "ebcdic-es-284+euro" }); charset("IBM01146", "IBM1146", new String[] { "cp1146", // JDK historical "ccsid01146", "cp01146", "1146", "ebcdic-gb-285+euro" }); charset("IBM01147", "IBM1147", new String[] { "cp1147", // JDK historical "ccsid01147", "cp01147", "1147", "ebcdic-fr-277+euro" }); charset("IBM01148", "IBM1148", new String[] { "cp1148", // JDK historical "ccsid01148", "cp01148", "1148", "ebcdic-international-500+euro" }); charset("IBM01149", "IBM1149", new String[] { "cp1149", // JDK historical "ccsid01149", "cp01149", "1149", "ebcdic-s-871+euro" }); // Macintosh MacOS/Apple char encodingd charset("x-MacRoman", "MacRoman", new String[] { "MacRoman" // JDK historical }); charset("x-MacCentralEurope", "MacCentralEurope", new String[] { "MacCentralEurope" // JDK historical }); charset("x-MacCroatian", "MacCroatian", new String[] { "MacCroatian" // JDK historical }); charset("x-MacGreek", "MacGreek", new String[] { "MacGreek" // JDK historical }); charset("x-MacCyrillic", "MacCyrillic", new String[] { "MacCyrillic" // JDK historical }); charset("x-MacUkraine", "MacUkraine", new String[] { "MacUkraine" // JDK historical }); charset("x-MacTurkish", "MacTurkish", new String[] { "MacTurkish" // JDK historical }); charset("x-MacArabic", "MacArabic", new String[] { "MacArabic" // JDK historical }); charset("x-MacHebrew", "MacHebrew", new String[] { "MacHebrew" // JDK historical }); charset("x-MacIceland", "MacIceland", new String[] { "MacIceland" // JDK historical }); charset("x-MacRomania", "MacRomania", new String[] { "MacRomania" // JDK historical }); charset("x-MacThai", "MacThai", new String[] { "MacThai" // JDK historical }); charset("x-MacSymbol", "MacSymbol", new String[] { "MacSymbol" // JDK historical }); charset("x-MacDingbat", "MacDingbat", new String[] { "MacDingbat" // JDK historical }); instance = this; } private boolean initialized = false; // If the sun.nio.cs.map property is defined on the command line we won't // see it in the system-properties table until after the charset subsystem // has been initialized. We therefore delay the effect of this property // until after the JRE has completely booted. // // At the moment following values for this property are supported, property // value string is case insensitive. // // (1)"Windows-31J/Shift_JIS" // In 1.4.1 we added a correct implementation of the Shift_JIS charset // but in previous releases this charset name had been treated as an alias // for Windows-31J, aka MS932. Users who have existing code that depends // upon this alias can restore the previous behavior by defining this // property to have this value. // // (2)"x-windows-50221/ISO-2022-JP" // "x-windows-50220/ISO-2022-JP" // "x-windows-iso2022jp/ISO-2022-JP" // The charset ISO-2022-JP is a "standard based" implementation by default, // which supports ASCII, JIS_X_0201 and JIS_X_0208 mappings based encoding // and decoding only. // There are three Microsoft iso-2022-jp variants, namely x-windows-50220, // x-windows-50221 and x-windows-iso2022jp which behaves "slightly" differently // compared to the "standard based" implementation. See ISO2022_JP.java for // detailed description. Users who prefer the behavior of MS iso-2022-jp // variants should use these names explicitly instead of using "ISO-2022-JP" // and its aliases. However for those who need the ISO-2022-JP charset behaves // exactly the same as MS variants do, above properties can be defined to // switch. // // If we need to define other charset-alias mappings in the future then // this property could be further extended, the general idea being that its // value should be of the form // // new-charset-1/old-charset-1,new-charset-2/old-charset-2,... // // where each charset named to the left of a slash is intended to replace // (most) uses of the charset named to the right of the slash. // protected void init() { if (initialized) return; if (!sun.misc.VM.isBooted()) return; String map = AccessController.doPrivileged( new GetPropertyAction("sun.nio.cs.map")); boolean sjisIsMS932 = false; boolean iso2022jpIsMS50221 = false; boolean iso2022jpIsMS50220 = false; boolean iso2022jpIsMSISO2022JP = false; if (map != null) { String[] maps = map.split(","); for (int i = 0; i < maps.length; i++) { if (maps[i].equalsIgnoreCase("Windows-31J/Shift_JIS")) { sjisIsMS932 = true; } else if (maps[i].equalsIgnoreCase("x-windows-50221/ISO-2022-JP")) { iso2022jpIsMS50221 = true; } else if (maps[i].equalsIgnoreCase("x-windows-50220/ISO-2022-JP")) { iso2022jpIsMS50220 = true; } else if (maps[i].equalsIgnoreCase("x-windows-iso2022jp/ISO-2022-JP")) { iso2022jpIsMSISO2022JP = true; } } } if (sjisIsMS932) { deleteCharset("Shift_JIS", new String[] { // IANA aliases "sjis", // historical "shift_jis", "shift-jis", "ms_kanji", "x-sjis", "csShiftJIS" }); deleteCharset("windows-31j", new String[] { "MS932", // JDK historical "windows-932", "csWindows31J" }); charset("Shift_JIS", "SJIS", new String[] { // IANA aliases "sjis" // JDK historical }); charset("windows-31j", "MS932", new String[] { "MS932", // JDK historical "windows-932", "csWindows31J", "shift-jis", "ms_kanji", "x-sjis", "csShiftJIS", // This alias takes precedence over the actual // Shift_JIS charset itself since aliases are always // resolved first, before looking up canonical names. "shift_jis" }); } if (iso2022jpIsMS50221 || iso2022jpIsMS50220 || iso2022jpIsMSISO2022JP) { deleteCharset("ISO-2022-JP", new String[] { "iso2022jp", "jis", "csISO2022JP", "jis_encoding", "csjisencoding" }); if (iso2022jpIsMS50221) { deleteCharset("x-windows-50221", new String[] { "cp50221", "ms50221" }); charset("x-windows-50221", "MS50221", new String[] { "cp50221", "ms50221", "iso-2022-jp", "iso2022jp", "jis", "csISO2022JP", "jis_encoding", "csjisencoding" }); } else if (iso2022jpIsMS50220) { deleteCharset("x-windows-50220", new String[] { "cp50220", "ms50220" }); charset("x-windows-50220", "MS50220", new String[] { "cp50220", "ms50220", "iso-2022-jp", "iso2022jp", "jis", "csISO2022JP", "jis_encoding", "csjisencoding" }); } else { deleteCharset("x-windows-iso2022jp", new String[] { "windows-iso2022jp" }); charset("x-windows-iso2022jp", "MSISO2022JP", new String[] { "windows-iso2022jp", "iso-2022-jp", "iso2022jp", "jis", "csISO2022JP", "jis_encoding", "csjisencoding" }); } } String osName = AccessController.doPrivileged( new GetPropertyAction("os.name")); if ("SunOS".equals(osName) || "Linux".equals(osName)) { charset("x-COMPOUND_TEXT", "COMPOUND_TEXT", new String[] { "COMPOUND_TEXT", // JDK historical "x11-compound_text", "x-compound-text" }); } initialized = true; } public static String[] aliasesFor(String charsetName) { if (instance == null) return null; return instance.aliases(charsetName); } }