1526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen/* 2526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen * Copyright (C) 2007 Esmertec AG. 3526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen * Copyright (C) 2007 The Android Open Source Project 4526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen * 5526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen * Licensed under the Apache License, Version 2.0 (the "License"); 6526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen * you may not use this file except in compliance with the License. 7526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen * You may obtain a copy of the License at 8526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen * 9526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen * http://www.apache.org/licenses/LICENSE-2.0 10526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen * 11526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen * Unless required by applicable law or agreed to in writing, software 12526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen * distributed under the License is distributed on an "AS IS" BASIS, 13526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen * See the License for the specific language governing permissions and 15526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen * limitations under the License. 16526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen */ 17526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen 18526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wenpackage com.google.android.mms.pdu; 19526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen 20526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wenimport java.io.UnsupportedEncodingException; 21526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wenimport java.util.HashMap; 22526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen 23526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wenpublic class CharacterSets { 24526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen /** 25526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen * IANA assigned MIB enum numbers. 26526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen * 27526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen * From wap-230-wsp-20010705-a.pdf 28526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen * Any-charset = <Octet 128> 29526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen * Equivalent to the special RFC2616 charset value "*" 30526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen */ 31526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen public static final int ANY_CHARSET = 0x00; 32526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen public static final int US_ASCII = 0x03; 33526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen public static final int ISO_8859_1 = 0x04; 34526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen public static final int ISO_8859_2 = 0x05; 35526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen public static final int ISO_8859_3 = 0x06; 36526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen public static final int ISO_8859_4 = 0x07; 37526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen public static final int ISO_8859_5 = 0x08; 38526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen public static final int ISO_8859_6 = 0x09; 39526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen public static final int ISO_8859_7 = 0x0A; 40526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen public static final int ISO_8859_8 = 0x0B; 41526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen public static final int ISO_8859_9 = 0x0C; 42526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen public static final int SHIFT_JIS = 0x11; 43526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen public static final int UTF_8 = 0x6A; 44526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen public static final int BIG5 = 0x07EA; 45526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen public static final int UCS2 = 0x03E8; 46526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen public static final int UTF_16 = 0x03F7; 47526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen 48526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen /** 49526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen * If the encoding of given data is unsupported, use UTF_8 to decode it. 50526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen */ 51526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen public static final int DEFAULT_CHARSET = UTF_8; 52526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen 53526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen /** 54526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen * Array of MIB enum numbers. 55526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen */ 56526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen private static final int[] MIBENUM_NUMBERS = { 57526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen ANY_CHARSET, 58526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen US_ASCII, 59526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen ISO_8859_1, 60526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen ISO_8859_2, 61526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen ISO_8859_3, 62526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen ISO_8859_4, 63526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen ISO_8859_5, 64526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen ISO_8859_6, 65526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen ISO_8859_7, 66526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen ISO_8859_8, 67526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen ISO_8859_9, 68526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen SHIFT_JIS, 69526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen UTF_8, 70526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen BIG5, 71526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen UCS2, 72526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen UTF_16, 73526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen }; 74526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen 75526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen /** 76526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen * The Well-known-charset Mime name. 77526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen */ 78526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen public static final String MIMENAME_ANY_CHARSET = "*"; 79526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen public static final String MIMENAME_US_ASCII = "us-ascii"; 80526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen public static final String MIMENAME_ISO_8859_1 = "iso-8859-1"; 81526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen public static final String MIMENAME_ISO_8859_2 = "iso-8859-2"; 82526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen public static final String MIMENAME_ISO_8859_3 = "iso-8859-3"; 83526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen public static final String MIMENAME_ISO_8859_4 = "iso-8859-4"; 84526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen public static final String MIMENAME_ISO_8859_5 = "iso-8859-5"; 85526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen public static final String MIMENAME_ISO_8859_6 = "iso-8859-6"; 86526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen public static final String MIMENAME_ISO_8859_7 = "iso-8859-7"; 87526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen public static final String MIMENAME_ISO_8859_8 = "iso-8859-8"; 88526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen public static final String MIMENAME_ISO_8859_9 = "iso-8859-9"; 89526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen public static final String MIMENAME_SHIFT_JIS = "shift_JIS"; 90526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen public static final String MIMENAME_UTF_8 = "utf-8"; 91526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen public static final String MIMENAME_BIG5 = "big5"; 92526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen public static final String MIMENAME_UCS2 = "iso-10646-ucs-2"; 93526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen public static final String MIMENAME_UTF_16 = "utf-16"; 94526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen 95526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen public static final String DEFAULT_CHARSET_NAME = MIMENAME_UTF_8; 96526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen 97526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen /** 98526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen * Array of the names of character sets. 99526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen */ 100526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen private static final String[] MIME_NAMES = { 101526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen MIMENAME_ANY_CHARSET, 102526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen MIMENAME_US_ASCII, 103526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen MIMENAME_ISO_8859_1, 104526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen MIMENAME_ISO_8859_2, 105526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen MIMENAME_ISO_8859_3, 106526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen MIMENAME_ISO_8859_4, 107526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen MIMENAME_ISO_8859_5, 108526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen MIMENAME_ISO_8859_6, 109526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen MIMENAME_ISO_8859_7, 110526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen MIMENAME_ISO_8859_8, 111526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen MIMENAME_ISO_8859_9, 112526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen MIMENAME_SHIFT_JIS, 113526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen MIMENAME_UTF_8, 114526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen MIMENAME_BIG5, 115526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen MIMENAME_UCS2, 116526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen MIMENAME_UTF_16, 117526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen }; 118526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen 119526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen private static final HashMap<Integer, String> MIBENUM_TO_NAME_MAP; 120526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen private static final HashMap<String, Integer> NAME_TO_MIBENUM_MAP; 121526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen 122526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen static { 123526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen // Create the HashMaps. 124526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen MIBENUM_TO_NAME_MAP = new HashMap<Integer, String>(); 125526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen NAME_TO_MIBENUM_MAP = new HashMap<String, Integer>(); 126526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen assert(MIBENUM_NUMBERS.length == MIME_NAMES.length); 127526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen int count = MIBENUM_NUMBERS.length - 1; 128526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen for(int i = 0; i <= count; i++) { 129526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen MIBENUM_TO_NAME_MAP.put(MIBENUM_NUMBERS[i], MIME_NAMES[i]); 130526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen NAME_TO_MIBENUM_MAP.put(MIME_NAMES[i], MIBENUM_NUMBERS[i]); 131526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen } 132526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen } 133526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen 134526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen private CharacterSets() {} // Non-instantiatable 135526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen 136526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen /** 137526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen * Map an MIBEnum number to the name of the charset which this number 138526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen * is assigned to by IANA. 139526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen * 140526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen * @param mibEnumValue An IANA assigned MIBEnum number. 141526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen * @return The name string of the charset. 142526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen * @throws UnsupportedEncodingException 143526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen */ 144526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen public static String getMimeName(int mibEnumValue) 145526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen throws UnsupportedEncodingException { 146526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen String name = MIBENUM_TO_NAME_MAP.get(mibEnumValue); 147526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen if (name == null) { 148526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen throw new UnsupportedEncodingException(); 149526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen } 150526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen return name; 151526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen } 152526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen 153526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen /** 154526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen * Map a well-known charset name to its assigned MIBEnum number. 155526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen * 156526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen * @param mimeName The charset name. 157526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen * @return The MIBEnum number assigned by IANA for this charset. 158526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen * @throws UnsupportedEncodingException 159526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen */ 160526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen public static int getMibEnumValue(String mimeName) 161526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen throws UnsupportedEncodingException { 162526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen if(null == mimeName) { 163526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen return -1; 164526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen } 165526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen 166526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen Integer mibEnumValue = NAME_TO_MIBENUM_MAP.get(mimeName); 167526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen if (mibEnumValue == null) { 168526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen throw new UnsupportedEncodingException(); 169526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen } 170526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen return mibEnumValue; 171526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen } 172526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen} 173