james-mime4j-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From ol...@apache.org
Subject svn commit: r1092323 - in /james/mime4j/trunk: core/src/main/java/org/apache/james/mime4j/codec/ core/src/main/java/org/apache/james/mime4j/util/ dom/src/test/java/org/apache/james/mime4j/dom/ storage/src/main/java/org/apache/james/mime4j/storage/
Date Thu, 14 Apr 2011 15:07:05 GMT
Author: olegk
Date: Thu Apr 14 15:07:05 2011
New Revision: 1092323

URL: http://svn.apache.org/viewvc?rev=1092323&view=rev
Log:
MIME4-159: removed custom charset registry in favor of Java standard Charset implementation

Modified:
    james/mime4j/trunk/core/src/main/java/org/apache/james/mime4j/codec/DecoderUtil.java
    james/mime4j/trunk/core/src/main/java/org/apache/james/mime4j/codec/EncoderUtil.java
    james/mime4j/trunk/core/src/main/java/org/apache/james/mime4j/util/CharsetUtil.java
    james/mime4j/trunk/dom/src/test/java/org/apache/james/mime4j/dom/MessageParserTest.java
    james/mime4j/trunk/storage/src/main/java/org/apache/james/mime4j/storage/StorageBodyFactory.java
    james/mime4j/trunk/storage/src/main/java/org/apache/james/mime4j/storage/StorageTextBody.java
    james/mime4j/trunk/storage/src/main/java/org/apache/james/mime4j/storage/StringTextBody.java

Modified: james/mime4j/trunk/core/src/main/java/org/apache/james/mime4j/codec/DecoderUtil.java
URL: http://svn.apache.org/viewvc/james/mime4j/trunk/core/src/main/java/org/apache/james/mime4j/codec/DecoderUtil.java?rev=1092323&r1=1092322&r2=1092323&view=diff
==============================================================================
--- james/mime4j/trunk/core/src/main/java/org/apache/james/mime4j/codec/DecoderUtil.java (original)
+++ james/mime4j/trunk/core/src/main/java/org/apache/james/mime4j/codec/DecoderUtil.java Thu Apr 14 15:07:05 2011
@@ -23,6 +23,7 @@ import java.io.ByteArrayInputStream;
 import java.io.ByteArrayOutputStream;
 import java.io.IOException;
 import java.io.UnsupportedEncodingException;
+import java.nio.charset.Charset;
 import java.util.regex.Matcher;
 import java.util.regex.Pattern;
 
@@ -177,17 +178,12 @@ public class DecoderUtil {
 
     // return null on error
     private static String tryDecodeEncodedWord(final String mimeCharset,
-            final String encoding, final String encodedText, DecodeMonitor monitor) throws IllegalArgumentException {
-        String charset = CharsetUtil.toJavaCharset(mimeCharset);
+            final String encoding, final String encodedText, final DecodeMonitor monitor) {
+        Charset charset = CharsetUtil.lookup(mimeCharset);
         if (charset == null) {
             monitor(monitor, mimeCharset, encoding, encodedText, "leaving word encoded", 
                     "Mime charser '", mimeCharset, "' doesn't have a corresponding Java charset");
             return null;
-        } else if (!CharsetUtil.isDecodingSupported(charset)) {
-            monitor(monitor, mimeCharset, encoding, encodedText, "leaving word encoded", 
-                    "Current JDK doesn't support decoding of charset '", charset, 
-                    "' - MIME charset '", mimeCharset, "' in encoded word");
-            return null;
         }
 
         if (encodedText.length() == 0) {
@@ -198,9 +194,9 @@ public class DecoderUtil {
 
         try {
             if (encoding.equalsIgnoreCase("Q")) {
-                return DecoderUtil.decodeQ(encodedText, charset, monitor);
+                return DecoderUtil.decodeQ(encodedText, charset.name(), monitor);
             } else if (encoding.equalsIgnoreCase("B")) {
-                return DecoderUtil.decodeB(encodedText, charset, monitor);
+                return DecoderUtil.decodeB(encodedText, charset.name(), monitor);
             } else {
                 monitor(monitor, mimeCharset, encoding, encodedText, "leaving word encoded", 
                         "Warning: Unknown encoding in encoded word");

Modified: james/mime4j/trunk/core/src/main/java/org/apache/james/mime4j/codec/EncoderUtil.java
URL: http://svn.apache.org/viewvc/james/mime4j/trunk/core/src/main/java/org/apache/james/mime4j/codec/EncoderUtil.java?rev=1092323&r1=1092322&r2=1092323&view=diff
==============================================================================
--- james/mime4j/trunk/core/src/main/java/org/apache/james/mime4j/codec/EncoderUtil.java (original)
+++ james/mime4j/trunk/core/src/main/java/org/apache/james/mime4j/codec/EncoderUtil.java Thu Apr 14 15:07:05 2011
@@ -310,22 +310,16 @@ public class EncoderUtil {
         if (charset == null)
             charset = determineCharset(text);
 
-        String mimeCharset = CharsetUtil.toMimeCharset(charset.name());
-        if (mimeCharset == null) {
-            // cannot happen if charset was originally null
-            throw new IllegalArgumentException("Unsupported charset");
-        }
-
         byte[] bytes = encode(text, charset);
 
         if (encoding == null)
             encoding = determineEncoding(bytes, usage);
 
         if (encoding == Encoding.B) {
-            String prefix = ENC_WORD_PREFIX + mimeCharset + "?B?";
+            String prefix = ENC_WORD_PREFIX + charset.name() + "?B?";
             return encodeB(prefix, text, usedCharacters, charset, bytes);
         } else {
-            String prefix = ENC_WORD_PREFIX + mimeCharset + "?Q?";
+            String prefix = ENC_WORD_PREFIX + charset.name() + "?Q?";
             return encodeQ(prefix, text, usage, usedCharacters, charset, bytes);
         }
     }

Modified: james/mime4j/trunk/core/src/main/java/org/apache/james/mime4j/util/CharsetUtil.java
URL: http://svn.apache.org/viewvc/james/mime4j/trunk/core/src/main/java/org/apache/james/mime4j/util/CharsetUtil.java?rev=1092323&r1=1092322&r2=1092323&view=diff
==============================================================================
--- james/mime4j/trunk/core/src/main/java/org/apache/james/mime4j/util/CharsetUtil.java (original)
+++ james/mime4j/trunk/core/src/main/java/org/apache/james/mime4j/util/CharsetUtil.java Thu Apr 14 15:07:05 2011
@@ -19,1016 +19,14 @@
 
 package org.apache.james.mime4j.util;
 
-import java.io.UnsupportedEncodingException;
-import java.util.HashMap;
-import java.util.Map;
-import java.util.SortedSet;
-import java.util.TreeSet;
+import java.nio.charset.Charset;
+import java.nio.charset.UnsupportedCharsetException;
 
 /**
- * Utility class for working with character sets. It is somewhat similar to
- * the Java 1.4 <code>java.nio.charset.Charset</code> class but knows many
- * more aliases and is compatible with Java 1.3. It will use a simple detection
- * mechanism to detect what character sets the current VM supports. This will
- * be a sub-set of the character sets listed in the
- * <a href="http://java.sun.com/j2se/1.5.0/docs/guide/intl/encoding.doc.html">
- * Java 1.5 (J2SE5.0) Supported Encodings</a> document.
- * <p>
- * The <a href="http://www.iana.org/assignments/character-sets">
- * IANA Character Sets</a> document has been used to determine the preferred
- * MIME character set names and to get a list of known aliases.
- * <p>
- * This is a complete list of the character sets known to this class:
- * <table>
- *     <tr>
- *         <td>Canonical (Java) name</td>
- *         <td>MIME preferred</td>
- *         <td>Aliases</td>
- *     </tr>
- *     <tr>
- *         <td>ASCII</td>
- *         <td>US-ASCII</td>
- *         <td>ANSI_X3.4-1968 iso-ir-6 ANSI_X3.4-1986 ISO_646.irv:1991 ISO646-US us IBM367 cp367 csASCII ascii7 646 iso_646.irv:1983 </td>
- *     </tr>
- *     <tr>
- *         <td>Big5</td>
- *         <td>Big5</td>
- *         <td>csBig5 CN-Big5 BIG-FIVE BIGFIVE </td>
- *     </tr>
- *     <tr>
- *         <td>Big5_HKSCS</td>
- *         <td>Big5-HKSCS</td>
- *         <td>big5hkscs </td>
- *     </tr>
- *     <tr>
- *         <td>Big5_Solaris</td>
- *         <td>?</td>
- *         <td></td>
- *     </tr>
- *     <tr>
- *         <td>Cp037</td>
- *         <td>IBM037</td>
- *         <td>ebcdic-cp-us ebcdic-cp-ca ebcdic-cp-wt ebcdic-cp-nl csIBM037 </td>
- *     </tr>
- *     <tr>
- *         <td>Cp1006</td>
- *         <td>?</td>
- *         <td></td>
- *     </tr>
- *     <tr>
- *         <td>Cp1025</td>
- *         <td>?</td>
- *         <td></td>
- *     </tr>
- *     <tr>
- *         <td>Cp1026</td>
- *         <td>IBM1026</td>
- *         <td>csIBM1026 </td>
- *     </tr>
- *     <tr>
- *         <td>Cp1046</td>
- *         <td>?</td>
- *         <td></td>
- *     </tr>
- *     <tr>
- *         <td>Cp1047</td>
- *         <td>IBM1047</td>
- *         <td>IBM-1047 </td>
- *     </tr>
- *     <tr>
- *         <td>Cp1097</td>
- *         <td>?</td>
- *         <td></td>
- *     </tr>
- *     <tr>
- *         <td>Cp1098</td>
- *         <td>?</td>
- *         <td></td>
- *     </tr>
- *     <tr>
- *         <td>Cp1112</td>
- *         <td>?</td>
- *         <td></td>
- *     </tr>
- *     <tr>
- *         <td>Cp1122</td>
- *         <td>?</td>
- *         <td></td>
- *     </tr>
- *     <tr>
- *         <td>Cp1123</td>
- *         <td>?</td>
- *         <td></td>
- *     </tr>
- *     <tr>
- *         <td>Cp1124</td>
- *         <td>?</td>
- *         <td></td>
- *     </tr>
- *     <tr>
- *         <td>Cp1140</td>
- *         <td>IBM01140</td>
- *         <td>CCSID01140 CP01140 ebcdic-us-37+euro </td>
- *     </tr>
- *     <tr>
- *         <td>Cp1141</td>
- *         <td>IBM01141</td>
- *         <td>CCSID01141 CP01141 ebcdic-de-273+euro </td>
- *     </tr>
- *     <tr>
- *         <td>Cp1142</td>
- *         <td>IBM01142</td>
- *         <td>CCSID01142 CP01142 ebcdic-dk-277+euro ebcdic-no-277+euro </td>
- *     </tr>
- *     <tr>
- *         <td>Cp1143</td>
- *         <td>IBM01143</td>
- *         <td>CCSID01143 CP01143 ebcdic-fi-278+euro ebcdic-se-278+euro </td>
- *     </tr>
- *     <tr>
- *         <td>Cp1144</td>
- *         <td>IBM01144</td>
- *         <td>CCSID01144 CP01144 ebcdic-it-280+euro </td>
- *     </tr>
- *     <tr>
- *         <td>Cp1145</td>
- *         <td>IBM01145</td>
- *         <td>CCSID01145 CP01145 ebcdic-es-284+euro </td>
- *     </tr>
- *     <tr>
- *         <td>Cp1146</td>
- *         <td>IBM01146</td>
- *         <td>CCSID01146 CP01146 ebcdic-gb-285+euro </td>
- *     </tr>
- *     <tr>
- *         <td>Cp1147</td>
- *         <td>IBM01147</td>
- *         <td>CCSID01147 CP01147 ebcdic-fr-297+euro </td>
- *     </tr>
- *     <tr>
- *         <td>Cp1148</td>
- *         <td>IBM01148</td>
- *         <td>CCSID01148 CP01148 ebcdic-international-500+euro </td>
- *     </tr>
- *     <tr>
- *         <td>Cp1149</td>
- *         <td>IBM01149</td>
- *         <td>CCSID01149 CP01149 ebcdic-is-871+euro </td>
- *     </tr>
- *     <tr>
- *         <td>Cp1250</td>
- *         <td>windows-1250</td>
- *         <td></td>
- *     </tr>
- *     <tr>
- *         <td>Cp1251</td>
- *         <td>windows-1251</td>
- *         <td></td>
- *     </tr>
- *     <tr>
- *         <td>Cp1252</td>
- *         <td>windows-1252</td>
- *         <td></td>
- *     </tr>
- *     <tr>
- *         <td>Cp1253</td>
- *         <td>windows-1253</td>
- *         <td></td>
- *     </tr>
- *     <tr>
- *         <td>Cp1254</td>
- *         <td>windows-1254</td>
- *         <td></td>
- *     </tr>
- *     <tr>
- *         <td>Cp1255</td>
- *         <td>windows-1255</td>
- *         <td></td>
- *     </tr>
- *     <tr>
- *         <td>Cp1256</td>
- *         <td>windows-1256</td>
- *         <td></td>
- *     </tr>
- *     <tr>
- *         <td>Cp1257</td>
- *         <td>windows-1257</td>
- *         <td></td>
- *     </tr>
- *     <tr>
- *         <td>Cp1258</td>
- *         <td>windows-1258</td>
- *         <td></td>
- *     </tr>
- *     <tr>
- *         <td>Cp1381</td>
- *         <td>?</td>
- *         <td></td>
- *     </tr>
- *     <tr>
- *         <td>Cp1383</td>
- *         <td>?</td>
- *         <td></td>
- *     </tr>
- *     <tr>
- *         <td>Cp273</td>
- *         <td>IBM273</td>
- *         <td>csIBM273 </td>
- *     </tr>
- *     <tr>
- *         <td>Cp277</td>
- *         <td>IBM277</td>
- *         <td>EBCDIC-CP-DK EBCDIC-CP-NO csIBM277 </td>
- *     </tr>
- *     <tr>
- *         <td>Cp278</td>
- *         <td>IBM278</td>
- *         <td>CP278 ebcdic-cp-fi ebcdic-cp-se csIBM278 </td>
- *     </tr>
- *     <tr>
- *         <td>Cp280</td>
- *         <td>IBM280</td>
- *         <td>ebcdic-cp-it csIBM280 </td>
- *     </tr>
- *     <tr>
- *         <td>Cp284</td>
- *         <td>IBM284</td>
- *         <td>ebcdic-cp-es csIBM284 </td>
- *     </tr>
- *     <tr>
- *         <td>Cp285</td>
- *         <td>IBM285</td>
- *         <td>ebcdic-cp-gb csIBM285 </td>
- *     </tr>
- *     <tr>
- *         <td>Cp297</td>
- *         <td>IBM297</td>
- *         <td>ebcdic-cp-fr csIBM297 </td>
- *     </tr>
- *     <tr>
- *         <td>Cp33722</td>
- *         <td>?</td>
- *         <td></td>
- *     </tr>
- *     <tr>
- *         <td>Cp420</td>
- *         <td>IBM420</td>
- *         <td>ebcdic-cp-ar1 csIBM420 </td>
- *     </tr>
- *     <tr>
- *         <td>Cp424</td>
- *         <td>IBM424</td>
- *         <td>ebcdic-cp-he csIBM424 </td>
- *     </tr>
- *     <tr>
- *         <td>Cp437</td>
- *         <td>IBM437</td>
- *         <td>437 csPC8CodePage437 </td>
- *     </tr>
- *     <tr>
- *         <td>Cp500</td>
- *         <td>IBM500</td>
- *         <td>ebcdic-cp-be ebcdic-cp-ch csIBM500 </td>
- *     </tr>
- *     <tr>
- *         <td>Cp737</td>
- *         <td>?</td>
- *         <td></td>
- *     </tr>
- *     <tr>
- *         <td>Cp775</td>
- *         <td>IBM775</td>
- *         <td>csPC775Baltic </td>
- *     </tr>
- *     <tr>
- *         <td>Cp838</td>
- *         <td>IBM-Thai</td>
- *         <td></td>
- *     </tr>
- *     <tr>
- *         <td>Cp850</td>
- *         <td>IBM850</td>
- *         <td>850 csPC850Multilingual </td>
- *     </tr>
- *     <tr>
- *         <td>Cp852</td>
- *         <td>IBM852</td>
- *         <td>852 csPCp852 </td>
- *     </tr>
- *     <tr>
- *         <td>Cp855</td>
- *         <td>IBM855</td>
- *         <td>855 csIBM855 </td>
- *     </tr>
- *     <tr>
- *         <td>Cp856</td>
- *         <td>?</td>
- *         <td></td>
- *     </tr>
- *     <tr>
- *         <td>Cp857</td>
- *         <td>IBM857</td>
- *         <td>857 csIBM857 </td>
- *     </tr>
- *     <tr>
- *         <td>Cp858</td>
- *         <td>IBM00858</td>
- *         <td>CCSID00858 CP00858 PC-Multilingual-850+euro </td>
- *     </tr>
- *     <tr>
- *         <td>Cp860</td>
- *         <td>IBM860</td>
- *         <td>860 csIBM860 </td>
- *     </tr>
- *     <tr>
- *         <td>Cp861</td>
- *         <td>IBM861</td>
- *         <td>861 cp-is csIBM861 </td>
- *     </tr>
- *     <tr>
- *         <td>Cp862</td>
- *         <td>IBM862</td>
- *         <td>862 csPC862LatinHebrew </td>
- *     </tr>
- *     <tr>
- *         <td>Cp863</td>
- *         <td>IBM863</td>
- *         <td>863 csIBM863 </td>
- *     </tr>
- *     <tr>
- *         <td>Cp864</td>
- *         <td>IBM864</td>
- *         <td>cp864 csIBM864 </td>
- *     </tr>
- *     <tr>
- *         <td>Cp865</td>
- *         <td>IBM865</td>
- *         <td>865 csIBM865 </td>
- *     </tr>
- *     <tr>
- *         <td>Cp866</td>
- *         <td>IBM866</td>
- *         <td>866 csIBM866 </td>
- *     </tr>
- *     <tr>
- *         <td>Cp868</td>
- *         <td>IBM868</td>
- *         <td>cp-ar csIBM868 </td>
- *     </tr>
- *     <tr>
- *         <td>Cp869</td>
- *         <td>IBM869</td>
- *         <td>cp-gr csIBM869 </td>
- *     </tr>
- *     <tr>
- *         <td>Cp870</td>
- *         <td>IBM870</td>
- *         <td>ebcdic-cp-roece ebcdic-cp-yu csIBM870 </td>
- *     </tr>
- *     <tr>
- *         <td>Cp871</td>
- *         <td>IBM871</td>
- *         <td>ebcdic-cp-is csIBM871 </td>
- *     </tr>
- *     <tr>
- *         <td>Cp875</td>
- *         <td>?</td>
- *         <td></td>
- *     </tr>
- *     <tr>
- *         <td>Cp918</td>
- *         <td>IBM918</td>
- *         <td>ebcdic-cp-ar2 csIBM918 </td>
- *     </tr>
- *     <tr>
- *         <td>Cp921</td>
- *         <td>?</td>
- *         <td></td>
- *     </tr>
- *     <tr>
- *         <td>Cp922</td>
- *         <td>?</td>
- *         <td></td>
- *     </tr>
- *     <tr>
- *         <td>Cp930</td>
- *         <td>?</td>
- *         <td></td>
- *     </tr>
- *     <tr>
- *         <td>Cp933</td>
- *         <td>?</td>
- *         <td></td>
- *     </tr>
- *     <tr>
- *         <td>Cp935</td>
- *         <td>?</td>
- *         <td></td>
- *     </tr>
- *     <tr>
- *         <td>Cp937</td>
- *         <td>?</td>
- *         <td></td>
- *     </tr>
- *     <tr>
- *         <td>Cp939</td>
- *         <td>?</td>
- *         <td></td>
- *     </tr>
- *     <tr>
- *         <td>Cp942</td>
- *         <td>?</td>
- *         <td></td>
- *     </tr>
- *     <tr>
- *         <td>Cp942C</td>
- *         <td>?</td>
- *         <td></td>
- *     </tr>
- *     <tr>
- *         <td>Cp943</td>
- *         <td>?</td>
- *         <td></td>
- *     </tr>
- *     <tr>
- *         <td>Cp943C</td>
- *         <td>?</td>
- *         <td></td>
- *     </tr>
- *     <tr>
- *         <td>Cp948</td>
- *         <td>?</td>
- *         <td></td>
- *     </tr>
- *     <tr>
- *         <td>Cp949</td>
- *         <td>?</td>
- *         <td></td>
- *     </tr>
- *     <tr>
- *         <td>Cp949C</td>
- *         <td>?</td>
- *         <td></td>
- *     </tr>
- *     <tr>
- *         <td>Cp950</td>
- *         <td>?</td>
- *         <td></td>
- *     </tr>
- *     <tr>
- *         <td>Cp964</td>
- *         <td>?</td>
- *         <td></td>
- *     </tr>
- *     <tr>
- *         <td>Cp970</td>
- *         <td>?</td>
- *         <td></td>
- *     </tr>
- *     <tr>
- *         <td>EUC_CN</td>
- *         <td>GB2312</td>
- *         <td>x-EUC-CN csGB2312 euccn euc-cn gb2312-80 gb2312-1980 CN-GB CN-GB-ISOIR165 </td>
- *     </tr>
- *     <tr>
- *         <td>EUC_JP</td>
- *         <td>EUC-JP</td>
- *         <td>csEUCPkdFmtJapanese Extended_UNIX_Code_Packed_Format_for_Japanese eucjis x-eucjp eucjp x-euc-jp </td>
- *     </tr>
- *     <tr>
- *         <td>EUC_JP_LINUX</td>
- *         <td>?</td>
- *         <td></td>
- *     </tr>
- *     <tr>
- *         <td>EUC_JP_Solaris</td>
- *         <td>?</td>
- *         <td></td>
- *     </tr>
- *     <tr>
- *         <td>EUC_KR</td>
- *         <td>EUC-KR</td>
- *         <td>csEUCKR ksc5601 5601 ksc5601_1987 ksc_5601 ksc5601-1987 ks_c_5601-1987 euckr </td>
- *     </tr>
- *     <tr>
- *         <td>EUC_TW</td>
- *         <td>EUC-TW</td>
- *         <td>x-EUC-TW cns11643 euctw </td>
- *     </tr>
- *     <tr>
- *         <td>GB18030</td>
- *         <td>GB18030</td>
- *         <td>gb18030-2000 </td>
- *     </tr>
- *     <tr>
- *         <td>GBK</td>
- *         <td>windows-936</td>
- *         <td>CP936 MS936 ms_936 x-mswin-936 </td>
- *     </tr>
- *     <tr>
- *         <td>ISCII91</td>
- *         <td>?</td>
- *         <td>x-ISCII91 iscii </td>
- *     </tr>
- *     <tr>
- *         <td>ISO2022CN</td>
- *         <td>ISO-2022-CN</td>
- *         <td></td>
- *     </tr>
- *     <tr>
- *         <td>ISO2022JP</td>
- *         <td>ISO-2022-JP</td>
- *         <td>csISO2022JP JIS jis_encoding csjisencoding </td>
- *     </tr>
- *     <tr>
- *         <td>ISO2022KR</td>
- *         <td>ISO-2022-KR</td>
- *         <td>csISO2022KR </td>
- *     </tr>
- *     <tr>
- *         <td>ISO2022_CN_CNS</td>
- *         <td>?</td>
- *         <td></td>
- *     </tr>
- *     <tr>
- *         <td>ISO2022_CN_GB</td>
- *         <td>?</td>
- *         <td></td>
- *     </tr>
- *     <tr>
- *         <td>ISO8859_1</td>
- *         <td>ISO-8859-1</td>
- *         <td>ISO_8859-1:1987 iso-ir-100 ISO_8859-1 latin1 l1 IBM819 CP819 csISOLatin1 8859_1 819 IBM-819 ISO8859-1 ISO_8859_1 </td>
- *     </tr>
- *     <tr>
- *         <td>ISO8859_13</td>
- *         <td>ISO-8859-13</td>
- *         <td></td>
- *     </tr>
- *     <tr>
- *         <td>ISO8859_15</td>
- *         <td>ISO-8859-15</td>
- *         <td>ISO_8859-15 Latin-9 8859_15 csISOlatin9 IBM923 cp923 923 L9 IBM-923 ISO8859-15 LATIN9 LATIN0 csISOlatin0 ISO8859_15_FDIS </td>
- *     </tr>
- *     <tr>
- *         <td>ISO8859_2</td>
- *         <td>ISO-8859-2</td>
- *         <td>ISO_8859-2:1987 iso-ir-101 ISO_8859-2 latin2 l2 csISOLatin2 8859_2 iso8859_2 </td>
- *     </tr>
- *     <tr>
- *         <td>ISO8859_3</td>
- *         <td>ISO-8859-3</td>
- *         <td>ISO_8859-3:1988 iso-ir-109 ISO_8859-3 latin3 l3 csISOLatin3 8859_3 </td>
- *     </tr>
- *     <tr>
- *         <td>ISO8859_4</td>
- *         <td>ISO-8859-4</td>
- *         <td>ISO_8859-4:1988 iso-ir-110 ISO_8859-4 latin4 l4 csISOLatin4 8859_4 </td>
- *     </tr>
- *     <tr>
- *         <td>ISO8859_5</td>
- *         <td>ISO-8859-5</td>
- *         <td>ISO_8859-5:1988 iso-ir-144 ISO_8859-5 cyrillic csISOLatinCyrillic 8859_5 </td>
- *     </tr>
- *     <tr>
- *         <td>ISO8859_6</td>
- *         <td>ISO-8859-6</td>
- *         <td>ISO_8859-6:1987 iso-ir-127 ISO_8859-6 ECMA-114 ASMO-708 arabic csISOLatinArabic 8859_6 </td>
- *     </tr>
- *     <tr>
- *         <td>ISO8859_7</td>
- *         <td>ISO-8859-7</td>
- *         <td>ISO_8859-7:1987 iso-ir-126 ISO_8859-7 ELOT_928 ECMA-118 greek greek8 csISOLatinGreek 8859_7 sun_eu_greek </td>
- *     </tr>
- *     <tr>
- *         <td>ISO8859_8</td>
- *         <td>ISO-8859-8</td>
- *         <td>ISO_8859-8:1988 iso-ir-138 ISO_8859-8 hebrew csISOLatinHebrew 8859_8 </td>
- *     </tr>
- *     <tr>
- *         <td>ISO8859_9</td>
- *         <td>ISO-8859-9</td>
- *         <td>ISO_8859-9:1989 iso-ir-148 ISO_8859-9 latin5 l5 csISOLatin5 8859_9 </td>
- *     </tr>
- *     <tr>
- *         <td>JISAutoDetect</td>
- *         <td>?</td>
- *         <td></td>
- *     </tr>
- *     <tr>
- *         <td>JIS_C6626-1983</td>
- *         <td>JIS_C6626-1983</td>
- *         <td>x-JIS0208 JIS0208 csISO87JISX0208 x0208 JIS_X0208-1983 iso-ir-87 </td>
- *     </tr>
- *     <tr>
- *         <td>JIS_X0201</td>
- *         <td>JIS_X0201</td>
- *         <td>X0201 JIS0201 csHalfWidthKatakana </td>
- *     </tr>
- *     <tr>
- *         <td>JIS_X0212-1990</td>
- *         <td>JIS_X0212-1990</td>
- *         <td>iso-ir-159 x0212 JIS0212 csISO159JISX02121990 </td>
- *     </tr>
- *     <tr>
- *         <td>KOI8_R</td>
- *         <td>KOI8-R</td>
- *         <td>csKOI8R koi8 </td>
- *     </tr>
- *     <tr>
- *         <td>MS874</td>
- *         <td>windows-874</td>
- *         <td>cp874 </td>
- *     </tr>
- *     <tr>
- *         <td>MS932</td>
- *         <td>Windows-31J</td>
- *         <td>windows-932 csWindows31J x-ms-cp932 </td>
- *     </tr>
- *     <tr>
- *         <td>MS949</td>
- *         <td>windows-949</td>
- *         <td>windows949 ms_949 x-windows-949 </td>
- *     </tr>
- *     <tr>
- *         <td>MS950</td>
- *         <td>windows-950</td>
- *         <td>x-windows-950 </td>
- *     </tr>
- *     <tr>
- *         <td>MS950_HKSCS</td>
- *         <td></td>
- *         <td></td>
- *     </tr>
- *     <tr>
- *         <td>MacArabic</td>
- *         <td>?</td>
- *         <td></td>
- *     </tr>
- *     <tr>
- *         <td>MacCentralEurope</td>
- *         <td>?</td>
- *         <td></td>
- *     </tr>
- *     <tr>
- *         <td>MacCroatian</td>
- *         <td>?</td>
- *         <td></td>
- *     </tr>
- *     <tr>
- *         <td>MacCyrillic</td>
- *         <td>?</td>
- *         <td></td>
- *     </tr>
- *     <tr>
- *         <td>MacDingbat</td>
- *         <td>?</td>
- *         <td></td>
- *     </tr>
- *     <tr>
- *         <td>MacGreek</td>
- *         <td>MacGreek</td>
- *         <td></td>
- *     </tr>
- *     <tr>
- *         <td>MacHebrew</td>
- *         <td>?</td>
- *         <td></td>
- *     </tr>
- *     <tr>
- *         <td>MacIceland</td>
- *         <td>?</td>
- *         <td></td>
- *     </tr>
- *     <tr>
- *         <td>MacRoman</td>
- *         <td>MacRoman</td>
- *         <td>Macintosh MAC csMacintosh </td>
- *     </tr>
- *     <tr>
- *         <td>MacRomania</td>
- *         <td>?</td>
- *         <td></td>
- *     </tr>
- *     <tr>
- *         <td>MacSymbol</td>
- *         <td>?</td>
- *         <td></td>
- *     </tr>
- *     <tr>
- *         <td>MacThai</td>
- *         <td>?</td>
- *         <td></td>
- *     </tr>
- *     <tr>
- *         <td>MacTurkish</td>
- *         <td>?</td>
- *         <td></td>
- *     </tr>
- *     <tr>
- *         <td>MacUkraine</td>
- *         <td>?</td>
- *         <td></td>
- *     </tr>
- *     <tr>
- *         <td>SJIS</td>
- *         <td>Shift_JIS</td>
- *         <td>MS_Kanji csShiftJIS shift-jis x-sjis pck </td>
- *     </tr>
- *     <tr>
- *         <td>TIS620</td>
- *         <td>TIS-620</td>
- *         <td></td>
- *     </tr>
- *     <tr>
- *         <td>UTF-16</td>
- *         <td>UTF-16</td>
- *         <td>UTF_16 </td>
- *     </tr>
- *     <tr>
- *         <td>UTF8</td>
- *         <td>UTF-8</td>
- *         <td></td>
- *     </tr>
- *     <tr>
- *         <td>UnicodeBig</td>
- *         <td>?</td>
- *         <td></td>
- *     </tr>
- *     <tr>
- *         <td>UnicodeBigUnmarked</td>
- *         <td>UTF-16BE</td>
- *         <td>X-UTF-16BE UTF_16BE ISO-10646-UCS-2 </td>
- *     </tr>
- *     <tr>
- *         <td>UnicodeLittle</td>
- *         <td>?</td>
- *         <td></td>
- *     </tr>
- *     <tr>
- *         <td>UnicodeLittleUnmarked</td>
- *         <td>UTF-16LE</td>
- *         <td>UTF_16LE X-UTF-16LE </td>
- *     </tr>
- *     <tr>
- *         <td>x-Johab</td>
- *         <td>johab</td>
- *         <td>johab cp1361 ms1361 ksc5601-1992 ksc5601_1992 </td>
- *     </tr>
- *     <tr>
- *         <td>x-iso-8859-11</td>
- *         <td>?</td>
- *         <td></td>
- *     </tr>
- * </table>
+ * Utility class for working with character sets. 
  */
 public class CharsetUtil {
     
-    private static class Charset implements Comparable<Charset> {
-        private String canonical = null;
-        private String mime = null;
-        private String[] aliases = null;
-        
-        private Charset(String canonical, String mime, String[] aliases) {
-            this.canonical = canonical;
-            this.mime = mime;
-            this.aliases = aliases;
-        }
-
-        public int compareTo(Charset c) {
-            return this.canonical.compareTo(c.canonical);
-        }
-    }
-    
-    private static Charset[] JAVA_CHARSETS = {
-        new Charset("ISO8859_1", "ISO-8859-1", 
-                    new String[] {"ISO_8859-1:1987", "iso-ir-100", "ISO_8859-1", 
-                                  "latin1", "l1", "IBM819", "CP819", 
-                                  "csISOLatin1", "8859_1", "819", "IBM-819", 
-                                  "ISO8859-1", "ISO_8859_1"}),
-        new Charset("ISO8859_2", "ISO-8859-2", 
-                    new String[] {"ISO_8859-2:1987", "iso-ir-101", "ISO_8859-2",  
-                                  "latin2", "l2", "csISOLatin2", "8859_2", 
-                                  "iso8859_2"}),
-        new Charset("ISO8859_3", "ISO-8859-3", new String[] {"ISO_8859-3:1988", "iso-ir-109", "ISO_8859-3", "latin3", "l3", "csISOLatin3", "8859_3"}),
-        new Charset("ISO8859_4", "ISO-8859-4", 
-                    new String[] {"ISO_8859-4:1988", "iso-ir-110", "ISO_8859-4",
-                                  "latin4", "l4", "csISOLatin4", "8859_4"}),
-        new Charset("ISO8859_5", "ISO-8859-5", 
-                    new String[] {"ISO_8859-5:1988", "iso-ir-144", "ISO_8859-5", 
-                                  "cyrillic", "csISOLatinCyrillic", "8859_5"}),
-        new Charset("ISO8859_6", "ISO-8859-6", new String[] {"ISO_8859-6:1987", "iso-ir-127", "ISO_8859-6", "ECMA-114", "ASMO-708", "arabic", "csISOLatinArabic", "8859_6"}),
-        new Charset("ISO8859_7", "ISO-8859-7", 
-                    new String[] {"ISO_8859-7:1987", "iso-ir-126", "ISO_8859-7", 
-                                  "ELOT_928", "ECMA-118", "greek", "greek8", 
-                                  "csISOLatinGreek", "8859_7", "sun_eu_greek"}),
-        new Charset("ISO8859_8", "ISO-8859-8", new String[] {"ISO_8859-8:1988", "iso-ir-138", "ISO_8859-8", "hebrew", "csISOLatinHebrew", "8859_8"}),
-        new Charset("ISO8859_9", "ISO-8859-9", 
-                    new String[] {"ISO_8859-9:1989", "iso-ir-148", "ISO_8859-9",  
-                                  "latin5", "l5", "csISOLatin5", "8859_9"}),
-
-        new Charset("ISO8859_13", "ISO-8859-13", new String[] {}),
-        new Charset("ISO8859_15", "ISO-8859-15", 
-                    new String[] {"ISO_8859-15", "Latin-9", "8859_15", 
-                                  "csISOlatin9", "IBM923", "cp923", "923", "L9",
-                                  "IBM-923", "ISO8859-15", "LATIN9", "LATIN0", 
-                                  "csISOlatin0", "ISO8859_15_FDIS"}),
-        new Charset("KOI8_R", "KOI8-R", new String[] {"csKOI8R", "koi8"}),
-        new Charset("ASCII", "US-ASCII", 
-                    new String[] {"ANSI_X3.4-1968", "iso-ir-6", 
-                                  "ANSI_X3.4-1986", "ISO_646.irv:1991", 
-                                  "ISO646-US", "us", "IBM367", "cp367", 
-                                  "csASCII", "ascii7", "646", "iso_646.irv:1983"}),
-        new Charset("UTF8", "UTF-8", new String[] {}),
-        new Charset("UTF-16", "UTF-16", new String[] {"UTF_16"}),
-        new Charset("UnicodeBigUnmarked", "UTF-16BE", new String[] {"X-UTF-16BE", "UTF_16BE", "ISO-10646-UCS-2"}),
-        new Charset("UnicodeLittleUnmarked", "UTF-16LE", new String[] {"UTF_16LE", "X-UTF-16LE"}),
-        new Charset("Big5", "Big5", new String[] {"csBig5", "CN-Big5", "BIG-FIVE", "BIGFIVE"}),
-        new Charset("Big5_HKSCS", "Big5-HKSCS", new String[] {"big5hkscs"}),
-        new Charset("EUC_JP", "EUC-JP", 
-                    new String[] {"csEUCPkdFmtJapanese", 
-                              "Extended_UNIX_Code_Packed_Format_for_Japanese",
-                              "eucjis", "x-eucjp", "eucjp", "x-euc-jp"}),
-        new Charset("EUC_KR", "EUC-KR", 
-                    new String[] {"csEUCKR", "ksc5601", "5601", "ksc5601_1987", 
-                                  "ksc_5601", "ksc5601-1987", "ks_c_5601-1987", 
-                                  "euckr"}),
-        new Charset("GB18030", "GB18030", new String[] {"gb18030-2000"}),
-        new Charset("EUC_CN", "GB2312", new String[] {"x-EUC-CN", "csGB2312", "euccn", "euc-cn", "gb2312-80", "gb2312-1980", "CN-GB", "CN-GB-ISOIR165"}),
-        new Charset("GBK", "windows-936", new String[] {"CP936", "MS936", "ms_936", "x-mswin-936"}),
-
-        new Charset("Cp037", "IBM037", new String[] {"ebcdic-cp-us", "ebcdic-cp-ca", "ebcdic-cp-wt", "ebcdic-cp-nl", "csIBM037"}),
-        new Charset("Cp273", "IBM273", new String[] {"csIBM273"}),
-        new Charset("Cp277", "IBM277", new String[] {"EBCDIC-CP-DK", "EBCDIC-CP-NO", "csIBM277"}),
-        new Charset("Cp278", "IBM278", new String[] {"CP278", "ebcdic-cp-fi", "ebcdic-cp-se", "csIBM278"}),
-        new Charset("Cp280", "IBM280", new String[] {"ebcdic-cp-it", "csIBM280"}),
-        new Charset("Cp284", "IBM284", new String[] {"ebcdic-cp-es", "csIBM284"}),
-        new Charset("Cp285", "IBM285", new String[] {"ebcdic-cp-gb", "csIBM285"}),
-        new Charset("Cp297", "IBM297", new String[] {"ebcdic-cp-fr", "csIBM297"}),
-        new Charset("Cp420", "IBM420", new String[] {"ebcdic-cp-ar1", "csIBM420"}),
-        new Charset("Cp424", "IBM424", new String[] {"ebcdic-cp-he", "csIBM424"}),
-        new Charset("Cp437", "IBM437", new String[] {"437", "csPC8CodePage437"}),
-        new Charset("Cp500", "IBM500", new String[] {"ebcdic-cp-be", "ebcdic-cp-ch", "csIBM500"}),
-        new Charset("Cp775", "IBM775", new String[] {"csPC775Baltic"}),
-        new Charset("Cp838", "IBM-Thai", new String[] {}),
-        new Charset("Cp850", "IBM850", new String[] {"850", "csPC850Multilingual"}),
-        new Charset("Cp852", "IBM852", new String[] {"852", "csPCp852"}),
-        new Charset("Cp855", "IBM855", new String[] {"855", "csIBM855"}),
-        new Charset("Cp857", "IBM857", new String[] {"857", "csIBM857"}),
-        new Charset("Cp858", "IBM00858", 
-                new String[] {"CCSID00858", "CP00858", 
-                              "PC-Multilingual-850+euro"}),
-        new Charset("Cp860", "IBM860", new String[] {"860", "csIBM860"}),
-        new Charset("Cp861", "IBM861", new String[] {"861", "cp-is", "csIBM861"}),
-        new Charset("Cp862", "IBM862", new String[] {"862", "csPC862LatinHebrew"}),
-        new Charset("Cp863", "IBM863", new String[] {"863", "csIBM863"}),
-        new Charset("Cp864", "IBM864", new String[] {"cp864", "csIBM864"}),
-        new Charset("Cp865", "IBM865", new String[] {"865", "csIBM865"}),
-        new Charset("Cp866", "IBM866", new String[] {"866", "csIBM866"}),
-        new Charset("Cp868", "IBM868", new String[] {"cp-ar", "csIBM868"}),
-        new Charset("Cp869", "IBM869", new String[] {"cp-gr", "csIBM869"}),
-        new Charset("Cp870", "IBM870", new String[] {"ebcdic-cp-roece", "ebcdic-cp-yu", "csIBM870"}),
-        new Charset("Cp871", "IBM871", new String[] {"ebcdic-cp-is", "csIBM871"}),
-        new Charset("Cp918", "IBM918", new String[] {"ebcdic-cp-ar2", "csIBM918"}),
-        new Charset("Cp1026", "IBM1026", new String[] {"csIBM1026"}),
-        new Charset("Cp1047", "IBM1047", new String[] {"IBM-1047"}),
-        new Charset("Cp1140", "IBM01140", 
-                    new String[] {"CCSID01140", "CP01140", 
-                                  "ebcdic-us-37+euro"}),
-        new Charset("Cp1141", "IBM01141", 
-                    new String[] {"CCSID01141", "CP01141", 
-                                  "ebcdic-de-273+euro"}),
-        new Charset("Cp1142", "IBM01142", new String[] {"CCSID01142", "CP01142", "ebcdic-dk-277+euro", "ebcdic-no-277+euro"}),
-        new Charset("Cp1143", "IBM01143", new String[] {"CCSID01143", "CP01143", "ebcdic-fi-278+euro", "ebcdic-se-278+euro"}),
-        new Charset("Cp1144", "IBM01144", new String[] {"CCSID01144", "CP01144", "ebcdic-it-280+euro"}),
-        new Charset("Cp1145", "IBM01145", new String[] {"CCSID01145", "CP01145", "ebcdic-es-284+euro"}),
-        new Charset("Cp1146", "IBM01146", new String[] {"CCSID01146", "CP01146", "ebcdic-gb-285+euro"}),
-        new Charset("Cp1147", "IBM01147", new String[] {"CCSID01147", "CP01147", "ebcdic-fr-297+euro"}),
-        new Charset("Cp1148", "IBM01148", new String[] {"CCSID01148", "CP01148", "ebcdic-international-500+euro"}),
-        new Charset("Cp1149", "IBM01149", new String[] {"CCSID01149", "CP01149", "ebcdic-is-871+euro"}),
-        new Charset("Cp1250", "windows-1250", new String[] {}),
-        new Charset("Cp1251", "windows-1251", new String[] {}),
-        new Charset("Cp1252", "windows-1252", new String[] {}),
-        new Charset("Cp1253", "windows-1253", new String[] {}),
-        new Charset("Cp1254", "windows-1254", new String[] {}),
-        new Charset("Cp1255", "windows-1255", new String[] {}),
-        new Charset("Cp1256", "windows-1256", new String[] {}),
-        new Charset("Cp1257", "windows-1257", new String[] {}),
-        new Charset("Cp1258", "windows-1258", new String[] {}),
-        new Charset("ISO2022CN", "ISO-2022-CN", new String[] {}),
-        new Charset("ISO2022JP", "ISO-2022-JP", new String[] {"csISO2022JP", "JIS", "jis_encoding", "csjisencoding"}),
-        new Charset("ISO2022KR", "ISO-2022-KR", new String[] {"csISO2022KR"}),
-        new Charset("JIS_X0201", "JIS_X0201", new String[] {"X0201", "JIS0201", "csHalfWidthKatakana"}),
-        new Charset("JIS_X0212-1990", "JIS_X0212-1990", new String[] {"iso-ir-159", "x0212", "JIS0212", "csISO159JISX02121990"}),
-        new Charset("JIS_C6626-1983", "JIS_C6626-1983", new String[] {"x-JIS0208", "JIS0208", "csISO87JISX0208", "x0208", "JIS_X0208-1983", "iso-ir-87"}),
-        new Charset("SJIS", "Shift_JIS", new String[] {"MS_Kanji", "csShiftJIS", "shift-jis", "x-sjis", "pck"}),
-        new Charset("TIS620", "TIS-620", new String[] {}),
-        new Charset("MS932", "Windows-31J", new String[] {"windows-932", "csWindows31J", "x-ms-cp932"}),
-        new Charset("EUC_TW", "EUC-TW", new String[] {"x-EUC-TW", "cns11643", "euctw"}),
-        new Charset("x-Johab", "johab", new String[] {"johab", "cp1361", "ms1361", "ksc5601-1992", "ksc5601_1992"}),
-        new Charset("MS950_HKSCS", "", new String[] {}),
-        new Charset("MS874", "windows-874", new String[] {"cp874"}),
-        new Charset("MS949", "windows-949", new String[] {"windows949", "ms_949", "x-windows-949"}),
-        new Charset("MS950", "windows-950", new String[] {"x-windows-950"}),
-
-        new Charset("Cp737", null, new String[] {}),
-        new Charset("Cp856", null, new String[] {}),
-        new Charset("Cp875", null, new String[] {}),
-        new Charset("Cp921", null, new String[] {}),
-        new Charset("Cp922", null, new String[] {}),
-        new Charset("Cp930", null, new String[] {}),
-        new Charset("Cp933", null, new String[] {}),
-        new Charset("Cp935", null, new String[] {}),
-        new Charset("Cp937", null, new String[] {}),
-        new Charset("Cp939", null, new String[] {}),
-        new Charset("Cp942", null, new String[] {}),
-        new Charset("Cp942C", null, new String[] {}),
-        new Charset("Cp943", null, new String[] {}),
-        new Charset("Cp943C", null, new String[] {}),
-        new Charset("Cp948", null, new String[] {}),
-        new Charset("Cp949", null, new String[] {}),
-        new Charset("Cp949C", null, new String[] {}),
-        new Charset("Cp950", null, new String[] {}),
-        new Charset("Cp964", null, new String[] {}),
-        new Charset("Cp970", null, new String[] {}),
-        new Charset("Cp1006", null, new String[] {}),
-        new Charset("Cp1025", null, new String[] {}),    
-        new Charset("Cp1046", null, new String[] {}),
-        new Charset("Cp1097", null, new String[] {}),
-        new Charset("Cp1098", null, new String[] {}),
-        new Charset("Cp1112", null, new String[] {}),
-        new Charset("Cp1122", null, new String[] {}),
-        new Charset("Cp1123", null, new String[] {}),
-        new Charset("Cp1124", null, new String[] {}),
-        new Charset("Cp1381", null, new String[] {}),
-        new Charset("Cp1383", null, new String[] {}),
-        new Charset("Cp33722", null, new String[] {}),
-        new Charset("Big5_Solaris", null, new String[] {}),
-        new Charset("EUC_JP_LINUX", null, new String[] {}),
-        new Charset("EUC_JP_Solaris", null, new String[] {}),
-        new Charset("ISCII91", null, new String[] {"x-ISCII91", "iscii"}),
-        new Charset("ISO2022_CN_CNS", null, new String[] {}),
-        new Charset("ISO2022_CN_GB", null, new String[] {}),
-        new Charset("x-iso-8859-11", null, new String[] {}),
-        new Charset("JISAutoDetect", null, new String[] {}),
-        new Charset("MacArabic", null, new String[] {}),
-        new Charset("MacCentralEurope", null, new String[] {}),
-        new Charset("MacCroatian", null, new String[] {}),
-        new Charset("MacCyrillic", null, new String[] {}),
-        new Charset("MacDingbat", null, new String[] {}),
-        new Charset("MacGreek", "MacGreek", new String[] {}),
-        new Charset("MacHebrew", null, new String[] {}),
-        new Charset("MacIceland", null, new String[] {}),
-        new Charset("MacRoman", "MacRoman", new String[] {"Macintosh", "MAC", "csMacintosh"}),
-        new Charset("MacRomania", null, new String[] {}),
-        new Charset("MacSymbol", null, new String[] {}),
-        new Charset("MacThai", null, new String[] {}),
-        new Charset("MacTurkish", null, new String[] {}),
-        new Charset("MacUkraine", null, new String[] {}),
-        new Charset("UnicodeBig", null, new String[] {}),
-        new Charset("UnicodeLittle", null, new String[] {})
-    };
-
-    /**
-     * Contains the canonical names of character sets which can be used to 
-     * decode bytes into Java chars.
-     */
-    private static SortedSet<String> decodingSupported = new TreeSet<String>();
-    
-    /**
-     * Contains the canonical names of character sets which can be used to 
-     * encode Java chars into bytes.
-     */
-    private static SortedSet<String> encodingSupported = new TreeSet<String>();
-    
-    /**
-     * Maps character set names to Charset objects. All possible names of
-     * a charset will be mapped to the Charset.
-     */
-    private static Map<String, Charset> charsetMap = null;
-    
-    /**
-     * Map tracking which charset encoding/decodings have been
-     * tested during runtime.
-     */
-    private static Map<String,Boolean> charsetsTested = new HashMap<String,Boolean>();
-    
-    static {
-
-    	charsetMap = new HashMap<String, Charset>();
-        for (Charset c : JAVA_CHARSETS) {
-            charsetMap.put(c.canonical.toLowerCase(), c);
-            if (c.mime != null) {
-                charsetMap.put(c.mime.toLowerCase(), c);
-            }
-            if (c.aliases != null) {
-                for (String str : c.aliases) {
-                    charsetMap.put(str.toLowerCase(), c);
-                }
-            }
-        }
-    }
-
     /** carriage return - line feed sequence */
     public static final String CRLF = "\r\n";
 
@@ -1044,16 +42,13 @@ public class CharsetUtil {
     /** US-ASCII HT, horizontal-tab (9) */
     public static final int HT = '\t';
 
-    public static final java.nio.charset.Charset US_ASCII = java.nio.charset.Charset
-            .forName("US-ASCII");
+    public static final Charset US_ASCII = Charset.forName("US-ASCII");
 
-    public static final java.nio.charset.Charset ISO_8859_1 = java.nio.charset.Charset
-            .forName("ISO-8859-1");
+    public static final Charset ISO_8859_1 = Charset.forName("ISO-8859-1");
 
-    public static final java.nio.charset.Charset UTF_8 = java.nio.charset.Charset
-            .forName("UTF-8");
+    public static final Charset UTF_8 = Charset.forName("UTF-8");
 
-    public static final java.nio.charset.Charset DEFAULT_CHARSET = US_ASCII;
+    public static final Charset DEFAULT_CHARSET = US_ASCII;
 
     /**
      * Returns <code>true</code> if the specified character falls into the US
@@ -1125,144 +120,12 @@ public class CharsetUtil {
         return true;
     }
     
-    /**
-     * Determines if the VM supports encoding (chars to bytes) the 
-     * specified character set. NOTE: the given character set name may 
-     * not be known to the VM even if this method returns <code>true</code>.
-     * Use {@link #toJavaCharset(String)} to get the canonical Java character
-     * set name.
-     * 
-     * @param charsetName the characters set name.
-     * @return <code>true</code> if encoding is supported, <code>false</code>
-     *         otherwise.
-     */
-    public static boolean isEncodingSupported(String charsetName) {
-    	if (!charsetsTested.containsKey(charsetName.toLowerCase())) {
-    		testCharset(charsetName.toLowerCase());
-    	}
-        return encodingSupported.contains(charsetName.toLowerCase());
-    }
-    
-    /**
-     * Determines if the VM supports decoding (bytes to chars) the 
-     * specified character set. NOTE: the given character set name may 
-     * not be known to the VM even if this method returns <code>true</code>.
-     * Use {@link #toJavaCharset(String)} to get the canonical Java character
-     * set name.
-     * 
-     * @param charsetName the characters set name.
-     * @return <code>true</code> if decoding is supported, <code>false</code>
-     *         otherwise.
-     */
-    public static boolean isDecodingSupported(String charsetName) {
-    	if (!charsetsTested.containsKey(charsetName.toLowerCase())) {
-    		testCharset(charsetName.toLowerCase());
-    	}
-        return decodingSupported.contains(charsetName.toLowerCase());
-    }
-    
-    
-    /**
-     * Runs underlying encoding/decodings tests to determine appropriate
-     * responses for {@link #isDecodingSupported(String)} and {@link #isEncodingSupported(String)}
-     * 
-     * @param charsetName the characters set name.
-     */
-    private static void testCharset(String charsetName) {
-	    byte[] dummy = new byte[] {'d', 'u', 'm', 'm', 'y'};
-	    Charset c = charsetMap.get(charsetName.toLowerCase());
-	    if (null == c) {
-	    	charsetsTested.put(charsetName.toLowerCase(), null);
-	    	return;
-	    }
-
-    	try {
-            new String(dummy, c.canonical);
-            decodingSupported.add(c.canonical.toLowerCase());
-        } catch (UnsupportedOperationException e) {
-        } catch (UnsupportedEncodingException e) {
-        }
-        
+    public static Charset lookup(final String name) {
         try {
-            "dummy".getBytes(c.canonical);
-            encodingSupported.add(c.canonical.toLowerCase());
-        } catch (UnsupportedOperationException e) {
-        } catch (UnsupportedEncodingException e) {
-        }
-        
-        charsetsTested.put(charsetName.toLowerCase(), null);
-    }
-    
-    
-    
-    /**
-     * Gets the preferred MIME character set name for the specified
-     * character set or <code>null</code> if not known.
-     * 
-     * @param charsetName the character set name to look for.
-     * @return the MIME preferred name or <code>null</code> if not known.
-     */
-    public static String toMimeCharset(String charsetName) {
-        Charset c = charsetMap.get(charsetName.toLowerCase());
-        if (c != null) {
-            return c.mime;
-        }
-        return null;
-    }
-    
-    /**
-     * Gets the canonical Java character set name for the specified
-     * character set or <code>null</code> if not known. This should be
-     * called before doing any conversions using the Java API. NOTE:
-     * you must use {@link #isEncodingSupported(String)} or
-     * {@link #isDecodingSupported(String)} to make sure the returned
-     * Java character set is supported by the current VM.
-     * 
-     * @param charsetName the character set name to look for.
-     * @return the canonical Java name or <code>null</code> if not known.
-     */
-    public static String toJavaCharset(String charsetName) {
-        Charset c = charsetMap.get(charsetName.toLowerCase());
-        if (c != null) {
-            return c.canonical;
+            return Charset.forName(name);
+        } catch (UnsupportedCharsetException ex) {
+            return null;
         }
-        return null;
-    }
-
-    /*
-     * Uncomment the code below and run the main method to regenerate the
-     * Javadoc table above when the known charsets change. 
-     */
-    
-    /*
-    private static String dumpHtmlTable() {
-        List<Charset> l = new LinkedList<Charset>(Arrays.asList(JAVA_CHARSETS));
-        Collections.sort(l);
-        StringBuilder sb = new StringBuilder();
-        sb.append(" * <table>\n");
-        sb.append(" *     <tr>\n");
-        sb.append(" *         <td>Canonical (Java) name</td>\n");
-        sb.append(" *         <td>MIME preferred</td>\n");
-        sb.append(" *         <td>Aliases</td>\n");
-        sb.append(" *     </tr>\n");
-
-        for (Charset c : l) {
-            sb.append(" *     <tr>\n");
-            sb.append(" *         <td>" + c.canonical + "</td>\n");
-            sb.append(" *         <td>" + (c.mime == null ? "?" : c.mime)+ "</td>\n");
-            sb.append(" *         <td>");
-            for (int i = 0; c.aliases != null && i < c.aliases.length; i++) {
-                sb.append(c.aliases[i] + " ");
-            }
-            sb.append("</td>\n");
-            sb.append(" *     </tr>\n");
-        }
-        sb.append(" * </table>\n");
-        return sb.toString();
     }
     
-    public static void main(String[] args) {
-        System.out.println(dumpHtmlTable());
-    }
-    */
-}
\ No newline at end of file
+ }
\ No newline at end of file

Modified: james/mime4j/trunk/dom/src/test/java/org/apache/james/mime4j/dom/MessageParserTest.java
URL: http://svn.apache.org/viewvc/james/mime4j/trunk/dom/src/test/java/org/apache/james/mime4j/dom/MessageParserTest.java?rev=1092323&r1=1092322&r2=1092323&view=diff
==============================================================================
--- james/mime4j/trunk/dom/src/test/java/org/apache/james/mime4j/dom/MessageParserTest.java (original)
+++ james/mime4j/trunk/dom/src/test/java/org/apache/james/mime4j/dom/MessageParserTest.java Thu Apr 14 15:07:05 2011
@@ -47,7 +47,6 @@ import org.apache.james.mime4j.field.Fie
 import org.apache.james.mime4j.message.MessageImpl;
 import org.apache.james.mime4j.message.MimeBuilder;
 import org.apache.james.mime4j.stream.MimeEntityConfig;
-import org.apache.james.mime4j.util.CharsetUtil;
 
 public class MessageParserTest extends TestCase {
     
@@ -182,7 +181,7 @@ public class MessageParserTest extends T
             URL expectedUrl = new URL(s);
                 
             if (b instanceof TextBody) {
-                String charset = CharsetUtil.toJavaCharset(e.getCharset());
+                String charset = e.getCharset();
                 if (charset == null) {
                     charset = "ISO8859-1";
                 }

Modified: james/mime4j/trunk/storage/src/main/java/org/apache/james/mime4j/storage/StorageBodyFactory.java
URL: http://svn.apache.org/viewvc/james/mime4j/trunk/storage/src/main/java/org/apache/james/mime4j/storage/StorageBodyFactory.java?rev=1092323&r1=1092322&r2=1092323&view=diff
==============================================================================
--- james/mime4j/trunk/storage/src/main/java/org/apache/james/mime4j/storage/StorageBodyFactory.java (original)
+++ james/mime4j/trunk/storage/src/main/java/org/apache/james/mime4j/storage/StorageBodyFactory.java Thu Apr 14 15:07:05 2011
@@ -287,7 +287,7 @@ public class StorageBodyFactory implemen
             final String mimeCharset, 
             boolean forEncoding,
             final DecodeMonitor monitor) {
-        String charset = CharsetUtil.toJavaCharset(mimeCharset);
+        Charset charset = CharsetUtil.lookup(mimeCharset);
         if (charset == null) {
             if (monitor.isListening()) {
                 monitor.warn(
@@ -297,28 +297,7 @@ public class StorageBodyFactory implemen
             }
             return FALLBACK_CHARSET;
         }
-
-        if (forEncoding && !CharsetUtil.isEncodingSupported(charset)) {
-            if (monitor.isListening()) {
-                monitor.warn(
-                        "MIME charset '" + mimeCharset
-                        + "' does not support encoding", "Using "
-                        + FALLBACK_CHARSET + " instead.");
-            }
-            return FALLBACK_CHARSET;
-        }
-
-        if (!forEncoding && !CharsetUtil.isDecodingSupported(charset)) {
-            if (monitor.isListening()) {
-                monitor.warn(
-                        "MIME charset '" + mimeCharset
-                        + "' does not support decoding", "Using "
-                        + FALLBACK_CHARSET + " instead.");
-            }
-            return FALLBACK_CHARSET;
-        }
-
-        return Charset.forName(charset);
+        return charset;
     }
 
 }

Modified: james/mime4j/trunk/storage/src/main/java/org/apache/james/mime4j/storage/StorageTextBody.java
URL: http://svn.apache.org/viewvc/james/mime4j/trunk/storage/src/main/java/org/apache/james/mime4j/storage/StorageTextBody.java?rev=1092323&r1=1092322&r2=1092323&view=diff
==============================================================================
--- james/mime4j/trunk/storage/src/main/java/org/apache/james/mime4j/storage/StorageTextBody.java (original)
+++ james/mime4j/trunk/storage/src/main/java/org/apache/james/mime4j/storage/StorageTextBody.java Thu Apr 14 15:07:05 2011
@@ -27,7 +27,6 @@ import java.nio.charset.Charset;
 
 import org.apache.james.mime4j.dom.TextBody;
 import org.apache.james.mime4j.storage.MultiReferenceStorage;
-import org.apache.james.mime4j.util.CharsetUtil;
 
 /**
  * Text body backed by a {@link org.apache.james.mime4j.storage.Storage}.
@@ -44,7 +43,7 @@ class StorageTextBody extends TextBody {
 
     @Override
     public String getMimeCharset() {
-        return CharsetUtil.toMimeCharset(charset.name());
+        return charset.name();
     }
 
     @Override

Modified: james/mime4j/trunk/storage/src/main/java/org/apache/james/mime4j/storage/StringTextBody.java
URL: http://svn.apache.org/viewvc/james/mime4j/trunk/storage/src/main/java/org/apache/james/mime4j/storage/StringTextBody.java?rev=1092323&r1=1092322&r2=1092323&view=diff
==============================================================================
--- james/mime4j/trunk/storage/src/main/java/org/apache/james/mime4j/storage/StringTextBody.java (original)
+++ james/mime4j/trunk/storage/src/main/java/org/apache/james/mime4j/storage/StringTextBody.java Thu Apr 14 15:07:05 2011
@@ -30,7 +30,6 @@ import java.io.Writer;
 import java.nio.charset.Charset;
 
 import org.apache.james.mime4j.dom.TextBody;
-import org.apache.james.mime4j.util.CharsetUtil;
 
 /**
  * Text body backed by a <code>String</code>.
@@ -47,7 +46,7 @@ class StringTextBody extends TextBody {
 
     @Override
     public String getMimeCharset() {
-        return CharsetUtil.toMimeCharset(charset.name());
+        return charset.name();
     }
 
     @Override



Mime
View raw message