/** * Copyright (C) 2003-2007 eXo Platform SAS. * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU Affero General Public License * as published by the Free Software Foundation; either version 3 * of the License, or (at your option) any later version. * * This program 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 for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, see. */ package org.exoplatform.services.xml.transform.impl; import java.util.Hashtable; import org.exoplatform.services.log.ExoLogger; import org.exoplatform.services.log.Log; import org.exoplatform.services.xml.transform.EncodingMap; /** * Created by The eXo Platform SAS . Conversions between IANA encoding names and * Java encoding names, * * @author Alexander Kravchuk * @version $Id: */ public class EncodingMapImpl implements EncodingMap { private static Log log = ExoLogger.getLogger(EncodingMapImpl.class); protected final static Hashtable IANA2JavaMap = new Hashtable(); protected final static Hashtable Java2IANAMap = new Hashtable(); public static void addIANA2JavaMapping(String iana, String java) { IANA2JavaMap.put(iana, java); if (Java2IANAMap.get(java) == null) { Java2IANAMap.put(java, iana); } } public static void removeIANA2JavaMapping(String iana, String java) { IANA2JavaMap.remove(iana); Java2IANAMap.remove(java); } public static void IANA2JavaMapping(String iana, String java) { IANA2JavaMap.put(iana, java); Java2IANAMap.put(java, iana); } public String convertIANA2Java(String iana) { return IANA2JavaMap.get(iana); } public String convertJava2IANA(String java) { log.debug("convert [" + java + "] to iana coding [" + Java2IANAMap.get(java) + "]"); return Java2IANAMap.get(java); } static { addIANA2JavaMapping("BIG5", "Big5"); addIANA2JavaMapping("CSBIG5", "Big5"); addIANA2JavaMapping("CP037", "CP037"); addIANA2JavaMapping("IBM037", "CP037"); addIANA2JavaMapping("CSIBM037", "CP037"); addIANA2JavaMapping("EBCDIC-CP-US", "CP037"); addIANA2JavaMapping("EBCDIC-CP-CA", "CP037"); addIANA2JavaMapping("EBCDIC-CP-NL", "CP037"); addIANA2JavaMapping("EBCDIC-CP-WT", "CP037"); addIANA2JavaMapping("IBM273", "CP273"); addIANA2JavaMapping("CP273", "CP273"); addIANA2JavaMapping("CSIBM273", "CP273"); addIANA2JavaMapping("IBM277", "CP277"); addIANA2JavaMapping("CP277", "CP277"); addIANA2JavaMapping("CSIBM277", "CP277"); addIANA2JavaMapping("EBCDIC-CP-DK", "CP277"); addIANA2JavaMapping("EBCDIC-CP-NO", "CP277"); addIANA2JavaMapping("IBM278", "CP278"); addIANA2JavaMapping("CP278", "CP278"); addIANA2JavaMapping("CSIBM278", "CP278"); addIANA2JavaMapping("EBCDIC-CP-FI", "CP278"); addIANA2JavaMapping("EBCDIC-CP-SE", "CP278"); addIANA2JavaMapping("IBM280", "CP280"); addIANA2JavaMapping("CP280", "CP280"); addIANA2JavaMapping("CSIBM280", "CP280"); addIANA2JavaMapping("EBCDIC-CP-IT", "CP280"); addIANA2JavaMapping("IBM284", "CP284"); addIANA2JavaMapping("CP284", "CP284"); addIANA2JavaMapping("CSIBM284", "CP284"); addIANA2JavaMapping("EBCDIC-CP-ES", "CP284"); addIANA2JavaMapping("EBCDIC-CP-GB", "CP285"); addIANA2JavaMapping("IBM285", "CP285"); addIANA2JavaMapping("CP285", "CP285"); addIANA2JavaMapping("CSIBM285", "CP285"); addIANA2JavaMapping("EBCDIC-JP-KANA", "CP290"); addIANA2JavaMapping("IBM290", "CP290"); addIANA2JavaMapping("CP290", "CP290"); addIANA2JavaMapping("CSIBM290", "CP290"); addIANA2JavaMapping("EBCDIC-CP-FR", "CP297"); addIANA2JavaMapping("IBM297", "CP297"); addIANA2JavaMapping("CP297", "CP297"); addIANA2JavaMapping("CSIBM297", "CP297"); addIANA2JavaMapping("EBCDIC-CP-AR1", "CP420"); addIANA2JavaMapping("IBM420", "CP420"); addIANA2JavaMapping("CP420", "CP420"); addIANA2JavaMapping("CSIBM420", "CP420"); addIANA2JavaMapping("EBCDIC-CP-HE", "CP424"); addIANA2JavaMapping("IBM424", "CP424"); addIANA2JavaMapping("CP424", "CP424"); addIANA2JavaMapping("CSIBM424", "CP424"); addIANA2JavaMapping("IBM437", "CP437"); addIANA2JavaMapping("437", "CP437"); addIANA2JavaMapping("CP437", "CP437"); addIANA2JavaMapping("CSPC8CODEPAGE437", "CP437"); addIANA2JavaMapping("EBCDIC-CP-CH", "CP500"); addIANA2JavaMapping("IBM500", "CP500"); addIANA2JavaMapping("CP500", "CP500"); addIANA2JavaMapping("CSIBM500", "CP500"); addIANA2JavaMapping("EBCDIC-CP-CH", "CP500"); addIANA2JavaMapping("EBCDIC-CP-BE", "CP500"); addIANA2JavaMapping("IBM775", "CP775"); addIANA2JavaMapping("CP775", "CP775"); addIANA2JavaMapping("CSPC775BALTIC", "CP775"); addIANA2JavaMapping("IBM850", "CP850"); addIANA2JavaMapping("850", "CP850"); addIANA2JavaMapping("CP850", "CP850"); addIANA2JavaMapping("CSPC850MULTILINGUAL", "CP850"); addIANA2JavaMapping("IBM852", "CP852"); addIANA2JavaMapping("852", "CP852"); addIANA2JavaMapping("CP852", "CP852"); addIANA2JavaMapping("CSPCP852", "CP852"); addIANA2JavaMapping("IBM855", "CP855"); addIANA2JavaMapping("855", "CP855"); addIANA2JavaMapping("CP855", "CP855"); addIANA2JavaMapping("CSIBM855", "CP855"); addIANA2JavaMapping("IBM857", "CP857"); addIANA2JavaMapping("857", "CP857"); addIANA2JavaMapping("CP857", "CP857"); addIANA2JavaMapping("CSIBM857", "CP857"); addIANA2JavaMapping("IBM00858", "CP858"); addIANA2JavaMapping("CP00858", "CP858"); addIANA2JavaMapping("CCSID00858", "CP858"); addIANA2JavaMapping("IBM860", "CP860"); addIANA2JavaMapping("860", "CP860"); addIANA2JavaMapping("CP860", "CP860"); addIANA2JavaMapping("CSIBM860", "CP860"); addIANA2JavaMapping("IBM861", "CP861"); addIANA2JavaMapping("861", "CP861"); addIANA2JavaMapping("CP861", "CP861"); addIANA2JavaMapping("CP-IS", "CP861"); addIANA2JavaMapping("CSIBM861", "CP861"); addIANA2JavaMapping("IBM862", "CP862"); addIANA2JavaMapping("862", "CP862"); addIANA2JavaMapping("CP862", "CP862"); addIANA2JavaMapping("CSPC862LATINHEBREW", "CP862"); addIANA2JavaMapping("IBM863", "CP863"); addIANA2JavaMapping("863", "CP863"); addIANA2JavaMapping("CP863", "CP863"); addIANA2JavaMapping("CSIBM863", "CP863"); addIANA2JavaMapping("IBM864", "CP864"); addIANA2JavaMapping("CP864", "CP864"); addIANA2JavaMapping("CSIBM864", "CP864"); addIANA2JavaMapping("IBM865", "CP865"); addIANA2JavaMapping("865", "CP865"); addIANA2JavaMapping("CP865", "CP865"); addIANA2JavaMapping("CSIBM865", "CP865"); addIANA2JavaMapping("IBM866", "CP866"); addIANA2JavaMapping("866", "CP866"); addIANA2JavaMapping("CP866", "CP866"); addIANA2JavaMapping("CSIBM866", "CP866"); addIANA2JavaMapping("IBM868", "CP868"); addIANA2JavaMapping("CP868", "CP868"); addIANA2JavaMapping("CSIBM868", "CP868"); addIANA2JavaMapping("CP-AR", "CP868"); addIANA2JavaMapping("IBM869", "CP869"); addIANA2JavaMapping("CP869", "CP869"); addIANA2JavaMapping("CSIBM869", "CP869"); addIANA2JavaMapping("CP-GR", "CP869"); addIANA2JavaMapping("IBM870", "CP870"); addIANA2JavaMapping("CP870", "CP870"); addIANA2JavaMapping("CSIBM870", "CP870"); addIANA2JavaMapping("EBCDIC-CP-ROECE", "CP870"); addIANA2JavaMapping("EBCDIC-CP-YU", "CP870"); addIANA2JavaMapping("IBM871", "CP871"); addIANA2JavaMapping("CP871", "CP871"); addIANA2JavaMapping("CSIBM871", "CP871"); addIANA2JavaMapping("EBCDIC-CP-IS", "CP871"); addIANA2JavaMapping("IBM918", "CP918"); addIANA2JavaMapping("CP918", "CP918"); addIANA2JavaMapping("CSIBM918", "CP918"); addIANA2JavaMapping("EBCDIC-CP-AR2", "CP918"); addIANA2JavaMapping("IBM00924", "CP924"); addIANA2JavaMapping("CP00924", "CP924"); addIANA2JavaMapping("CCSID00924", "CP924"); // is this an error??? addIANA2JavaMapping("EBCDIC-LATIN9--EURO", "CP924"); addIANA2JavaMapping("IBM1026", "CP1026"); addIANA2JavaMapping("CP1026", "CP1026"); addIANA2JavaMapping("CSIBM1026", "CP1026"); addIANA2JavaMapping("IBM01140", "Cp1140"); addIANA2JavaMapping("CP01140", "Cp1140"); addIANA2JavaMapping("CCSID01140", "Cp1140"); addIANA2JavaMapping("IBM01141", "Cp1141"); addIANA2JavaMapping("CP01141", "Cp1141"); addIANA2JavaMapping("CCSID01141", "Cp1141"); addIANA2JavaMapping("IBM01142", "Cp1142"); addIANA2JavaMapping("CP01142", "Cp1142"); addIANA2JavaMapping("CCSID01142", "Cp1142"); addIANA2JavaMapping("IBM01143", "Cp1143"); addIANA2JavaMapping("CP01143", "Cp1143"); addIANA2JavaMapping("CCSID01143", "Cp1143"); addIANA2JavaMapping("IBM01144", "Cp1144"); addIANA2JavaMapping("CP01144", "Cp1144"); addIANA2JavaMapping("CCSID01144", "Cp1144"); addIANA2JavaMapping("IBM01145", "Cp1145"); addIANA2JavaMapping("CP01145", "Cp1145"); addIANA2JavaMapping("CCSID01145", "Cp1145"); addIANA2JavaMapping("IBM01146", "Cp1146"); addIANA2JavaMapping("CP01146", "Cp1146"); addIANA2JavaMapping("CCSID01146", "Cp1146"); addIANA2JavaMapping("IBM01147", "Cp1147"); addIANA2JavaMapping("CP01147", "Cp1147"); addIANA2JavaMapping("CCSID01147", "Cp1147"); addIANA2JavaMapping("IBM01148", "Cp1148"); addIANA2JavaMapping("CP01148", "Cp1148"); addIANA2JavaMapping("CCSID01148", "Cp1148"); addIANA2JavaMapping("IBM01149", "Cp1149"); addIANA2JavaMapping("CP01149", "Cp1149"); addIANA2JavaMapping("CCSID01149", "Cp1149"); addIANA2JavaMapping("EUC-JP", "EUCJIS"); addIANA2JavaMapping("CSEUCPKDFMTJAPANESE", "EUCJIS"); addIANA2JavaMapping("EXTENDED_UNIX_CODE_PACKED_FORMAT_FOR_JAPANESE", "EUCJIS"); addIANA2JavaMapping("EUC-KR", "KSC5601"); addIANA2JavaMapping("CSEUCKR", "KSC5601"); addIANA2JavaMapping("KS_C_5601-1987", "KS_C_5601-1987"); addIANA2JavaMapping("ISO-IR-149", "KS_C_5601-1987"); addIANA2JavaMapping("KS_C_5601-1989", "KS_C_5601-1987"); addIANA2JavaMapping("KSC_5601", "KS_C_5601-1987"); addIANA2JavaMapping("KOREAN", "KS_C_5601-1987"); addIANA2JavaMapping("CSKSC56011987", "KS_C_5601-1987"); addIANA2JavaMapping("GB2312", "GB2312"); addIANA2JavaMapping("CSGB2312", "GB2312"); addIANA2JavaMapping("ISO-2022-JP", "JIS"); addIANA2JavaMapping("CSISO2022JP", "JIS"); addIANA2JavaMapping("ISO-2022-KR", "ISO2022KR"); addIANA2JavaMapping("CSISO2022KR", "ISO2022KR"); addIANA2JavaMapping("ISO-2022-CN", "ISO2022CN"); addIANA2JavaMapping("X0201", "JIS0201"); addIANA2JavaMapping("CSISO13JISC6220JP", "JIS0201"); addIANA2JavaMapping("X0208", "JIS0208"); addIANA2JavaMapping("ISO-IR-87", "JIS0208"); addIANA2JavaMapping("X0208dbiJIS_X0208-1983", "JIS0208"); addIANA2JavaMapping("CSISO87JISX0208", "JIS0208"); addIANA2JavaMapping("X0212", "JIS0212"); addIANA2JavaMapping("ISO-IR-159", "JIS0212"); addIANA2JavaMapping("CSISO159JISX02121990", "JIS0212"); addIANA2JavaMapping("GB18030", "GB18030"); addIANA2JavaMapping("GBK", "GBK"); addIANA2JavaMapping("CP936", "GBK"); addIANA2JavaMapping("MS936", "GBK"); addIANA2JavaMapping("WINDOWS-936", "GBK"); addIANA2JavaMapping("SHIFT_JIS", "SJIS"); addIANA2JavaMapping("CSSHIFTJIS", "SJIS"); addIANA2JavaMapping("MS_KANJI", "SJIS"); addIANA2JavaMapping("WINDOWS-31J", "MS932"); addIANA2JavaMapping("CSWINDOWS31J", "MS932"); // Add support for Cp1252 and its friends addIANA2JavaMapping("WINDOWS-1250", "Cp1250"); addIANA2JavaMapping("WINDOWS-1251", "Cp1251"); addIANA2JavaMapping("WINDOWS-1252", "Cp1252"); addIANA2JavaMapping("WINDOWS-1253", "Cp1253"); addIANA2JavaMapping("WINDOWS-1254", "Cp1254"); addIANA2JavaMapping("WINDOWS-1255", "Cp1255"); addIANA2JavaMapping("WINDOWS-1256", "Cp1256"); addIANA2JavaMapping("WINDOWS-1257", "Cp1257"); addIANA2JavaMapping("WINDOWS-1258", "Cp1258"); addIANA2JavaMapping("TIS-620", "TIS620"); addIANA2JavaMapping("ISO-8859-1", "ISO8859_1"); addIANA2JavaMapping("ISO-IR-100", "ISO8859_1"); addIANA2JavaMapping("ISO_8859-1", "ISO8859_1"); addIANA2JavaMapping("LATIN1", "ISO8859_1"); addIANA2JavaMapping("CSISOLATIN1", "ISO8859_1"); addIANA2JavaMapping("L1", "ISO8859_1"); addIANA2JavaMapping("IBM819", "ISO8859_1"); addIANA2JavaMapping("CP819", "ISO8859_1"); addIANA2JavaMapping("ISO-8859-2", "ISO8859_2"); addIANA2JavaMapping("ISO-IR-101", "ISO8859_2"); addIANA2JavaMapping("ISO_8859-2", "ISO8859_2"); addIANA2JavaMapping("LATIN2", "ISO8859_2"); addIANA2JavaMapping("CSISOLATIN2", "ISO8859_2"); addIANA2JavaMapping("L2", "ISO8859_2"); addIANA2JavaMapping("ISO-8859-3", "ISO8859_3"); addIANA2JavaMapping("ISO-IR-109", "ISO8859_3"); addIANA2JavaMapping("ISO_8859-3", "ISO8859_3"); addIANA2JavaMapping("LATIN3", "ISO8859_3"); addIANA2JavaMapping("CSISOLATIN3", "ISO8859_3"); addIANA2JavaMapping("L3", "ISO8859_3"); addIANA2JavaMapping("ISO-8859-4", "ISO8859_4"); addIANA2JavaMapping("ISO-IR-110", "ISO8859_4"); addIANA2JavaMapping("ISO_8859-4", "ISO8859_4"); addIANA2JavaMapping("LATIN4", "ISO8859_4"); addIANA2JavaMapping("CSISOLATIN4", "ISO8859_4"); addIANA2JavaMapping("L4", "ISO8859_4"); addIANA2JavaMapping("ISO-8859-5", "ISO8859_5"); addIANA2JavaMapping("ISO-IR-144", "ISO8859_5"); addIANA2JavaMapping("ISO_8859-5", "ISO8859_5"); addIANA2JavaMapping("CYRILLIC", "ISO8859_5"); addIANA2JavaMapping("CSISOLATINCYRILLIC", "ISO8859_5"); addIANA2JavaMapping("ISO-8859-6", "ISO8859_6"); addIANA2JavaMapping("ISO-IR-127", "ISO8859_6"); addIANA2JavaMapping("ISO_8859-6", "ISO8859_6"); addIANA2JavaMapping("ECMA-114", "ISO8859_6"); addIANA2JavaMapping("ASMO-708", "ISO8859_6"); addIANA2JavaMapping("ARABIC", "ISO8859_6"); addIANA2JavaMapping("CSISOLATINARABIC", "ISO8859_6"); addIANA2JavaMapping("ISO-8859-7", "ISO8859_7"); addIANA2JavaMapping("ISO-IR-126", "ISO8859_7"); addIANA2JavaMapping("ISO_8859-7", "ISO8859_7"); addIANA2JavaMapping("ELOT_928", "ISO8859_7"); addIANA2JavaMapping("ECMA-118", "ISO8859_7"); addIANA2JavaMapping("GREEK", "ISO8859_7"); addIANA2JavaMapping("CSISOLATINGREEK", "ISO8859_7"); addIANA2JavaMapping("GREEK8", "ISO8859_7"); addIANA2JavaMapping("ISO-8859-8", "ISO8859_8"); addIANA2JavaMapping("ISO-8859-8-I", "ISO8859_8"); // added since this // encoding only differs // w.r.t. presentation addIANA2JavaMapping("ISO-IR-138", "ISO8859_8"); addIANA2JavaMapping("ISO_8859-8", "ISO8859_8"); addIANA2JavaMapping("HEBREW", "ISO8859_8"); addIANA2JavaMapping("CSISOLATINHEBREW", "ISO8859_8"); addIANA2JavaMapping("ISO-8859-9", "ISO8859_9"); addIANA2JavaMapping("ISO-IR-148", "ISO8859_9"); addIANA2JavaMapping("ISO_8859-9", "ISO8859_9"); addIANA2JavaMapping("LATIN5", "ISO8859_9"); addIANA2JavaMapping("CSISOLATIN5", "ISO8859_9"); addIANA2JavaMapping("L5", "ISO8859_9"); addIANA2JavaMapping("ISO-8859-13", "ISO8859_13"); addIANA2JavaMapping("ISO-8859-15", "ISO8859_15_FDIS"); addIANA2JavaMapping("ISO_8859-15", "ISO8859_15_FDIS"); addIANA2JavaMapping("LATIN-9", "ISO8859_15_FDIS"); addIANA2JavaMapping("KOI8-R", "KOI8_R"); addIANA2JavaMapping("CSKOI8R", "KOI8_R"); addIANA2JavaMapping("US-ASCII", "ASCII"); addIANA2JavaMapping("ISO-IR-6", "ASCII"); addIANA2JavaMapping("ANSI_X3.4-1968", "ASCII"); addIANA2JavaMapping("ANSI_X3.4-1986", "ASCII"); addIANA2JavaMapping("ISO_646.IRV:1991", "ASCII"); addIANA2JavaMapping("ASCII", "ASCII"); addIANA2JavaMapping("CSASCII", "ASCII"); addIANA2JavaMapping("ISO646-US", "ASCII"); addIANA2JavaMapping("US", "ASCII"); addIANA2JavaMapping("IBM367", "ASCII"); addIANA2JavaMapping("CP367", "ASCII"); addIANA2JavaMapping("UTF-8", "UTF-8"); addIANA2JavaMapping("UTF-16", "UTF-16"); addIANA2JavaMapping("UTF-16BE", "UnicodeBig"); addIANA2JavaMapping("UTF-16LE", "UnicodeLittle"); // support for 1047, as proposed to be added to the // IANA registry in // http://lists.w3.org/Archives/Public/ietf-charset/2002JulSep/0049.html addIANA2JavaMapping("IBM-1047", "Cp1047"); addIANA2JavaMapping("IBM1047", "Cp1047"); addIANA2JavaMapping("CP1047", "Cp1047"); // Adding new aliases as proposed in // http://lists.w3.org/Archives/Public/ietf-charset/2002JulSep/0058.html addIANA2JavaMapping("IBM-37", "CP037"); addIANA2JavaMapping("IBM-273", "CP273"); addIANA2JavaMapping("IBM-277", "CP277"); addIANA2JavaMapping("IBM-278", "CP278"); addIANA2JavaMapping("IBM-280", "CP280"); addIANA2JavaMapping("IBM-284", "CP284"); addIANA2JavaMapping("IBM-285", "CP285"); addIANA2JavaMapping("IBM-290", "CP290"); addIANA2JavaMapping("IBM-297", "CP297"); addIANA2JavaMapping("IBM-420", "CP420"); addIANA2JavaMapping("IBM-424", "CP424"); addIANA2JavaMapping("IBM-437", "CP437"); addIANA2JavaMapping("IBM-500", "CP500"); addIANA2JavaMapping("IBM-775", "CP775"); addIANA2JavaMapping("IBM-850", "CP850"); addIANA2JavaMapping("IBM-852", "CP852"); addIANA2JavaMapping("IBM-855", "CP855"); addIANA2JavaMapping("IBM-857", "CP857"); addIANA2JavaMapping("IBM-858", "CP858"); addIANA2JavaMapping("IBM-860", "CP860"); addIANA2JavaMapping("IBM-861", "CP861"); addIANA2JavaMapping("IBM-862", "CP862"); addIANA2JavaMapping("IBM-863", "CP863"); addIANA2JavaMapping("IBM-864", "CP864"); addIANA2JavaMapping("IBM-865", "CP865"); addIANA2JavaMapping("IBM-866", "CP866"); addIANA2JavaMapping("IBM-868", "CP868"); addIANA2JavaMapping("IBM-869", "CP869"); addIANA2JavaMapping("IBM-870", "CP870"); addIANA2JavaMapping("IBM-871", "CP871"); addIANA2JavaMapping("IBM-918", "CP918"); addIANA2JavaMapping("IBM-924", "CP924"); addIANA2JavaMapping("IBM-1026", "CP1026"); addIANA2JavaMapping("IBM-1140", "Cp1140"); addIANA2JavaMapping("IBM-1141", "Cp1141"); addIANA2JavaMapping("IBM-1142", "Cp1142"); addIANA2JavaMapping("IBM-1143", "Cp1143"); addIANA2JavaMapping("IBM-1144", "Cp1144"); addIANA2JavaMapping("IBM-1145", "Cp1145"); addIANA2JavaMapping("IBM-1146", "Cp1146"); addIANA2JavaMapping("IBM-1147", "Cp1147"); addIANA2JavaMapping("IBM-1148", "Cp1148"); addIANA2JavaMapping("IBM-1149", "Cp1149"); addIANA2JavaMapping("IBM-819", "ISO8859_1"); addIANA2JavaMapping("IBM-367", "ASCII"); } }