001    /*
002     * Licensed to the Apache Software Foundation (ASF) under one or more
003     * contributor license agreements.  See the NOTICE file distributed with
004     * this work for additional information regarding copyright ownership.
005     * The ASF licenses this file to You under the Apache License, Version 2.0
006     * (the "License"); you may not use this file except in compliance with
007     * the License.  You may obtain a copy of the License at
008     * 
009     *      http://www.apache.org/licenses/LICENSE-2.0
010     * 
011     * Unless required by applicable law or agreed to in writing, software
012     * distributed under the License is distributed on an "AS IS" BASIS,
013     * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
014     * See the License for the specific language governing permissions and
015     * limitations under the License.
016     */
017    
018    package org.apache.commons.lang;
019    
020    import java.io.UnsupportedEncodingException;
021    
022    /**
023     * <p>
024     * Character encoding names required of every implementation of the Java platform.
025     * </p>
026     * 
027     * <p>
028     * According to <a href="http://java.sun.com/j2se/1.3/docs/api/java/lang/package-summary.html#charenc">JRE character
029     * encoding names</a>:
030     * <p>
031     * <cite>Every implementation of the Java platform is required to support the following character encodings. Consult the
032     * release documentation for your implementation to see if any other encodings are supported.</cite>
033     * </p>
034     * </p>
035     * 
036     * @see <a href="http://java.sun.com/j2se/1.3/docs/api/java/lang/package-summary.html#charenc">JRE character encoding
037     *      names</a>
038     * @author Apache Software Foundation
039     * @since 2.1
040     * @version $Id: CharEncoding.java 437554 2006-08-28 06:21:41Z bayard $
041     */
042    public class CharEncoding {
043    
044        /**
045         * <p>
046         * ISO Latin Alphabet #1, also known as ISO-LATIN-1.
047         * </p>
048         * <p>
049         * Every implementation of the Java platform is required to support this character encoding.
050         * </p>
051         * 
052         * @see <a href="http://java.sun.com/j2se/1.3/docs/api/java/lang/package-summary.html#charenc">JRE character
053         *      encoding names</a>
054         */
055        public static final String ISO_8859_1 = "ISO-8859-1";
056    
057        /**
058         * <p>
059         * Seven-bit ASCII, also known as ISO646-US, also known as the Basic Latin block of the Unicode character set.
060         * </p>
061         * <p>
062         * Every implementation of the Java platform is required to support this character encoding.
063         * </p>
064         * 
065         * @see <a href="http://java.sun.com/j2se/1.3/docs/api/java/lang/package-summary.html#charenc">JRE character
066         *      encoding names</a>
067         */
068        public static final String US_ASCII = "US-ASCII";
069    
070        /**
071         * <p>
072         * Sixteen-bit Unicode Transformation Format, byte order specified by a mandatory initial byte-order mark (either
073         * order accepted on input, big-endian used on output).
074         * </p>
075         * <p>
076         * Every implementation of the Java platform is required to support this character encoding.
077         * </p>
078         * 
079         * @see <a href="http://java.sun.com/j2se/1.3/docs/api/java/lang/package-summary.html#charenc">JRE character
080         *      encoding names</a>
081         */
082        public static final String UTF_16 = "UTF-16";
083    
084        /**
085         * <p>
086         * Sixteen-bit Unicode Transformation Format, big-endian byte order.
087         * </p>
088         * <p>
089         * Every implementation of the Java platform is required to support this character encoding.
090         * </p>
091         * 
092         * @see <a href="http://java.sun.com/j2se/1.3/docs/api/java/lang/package-summary.html#charenc">JRE character
093         *      encoding names</a>
094         */
095        public static final String UTF_16BE = "UTF-16BE";
096    
097        /**
098         * <p>
099         * Sixteen-bit Unicode Transformation Format, little-endian byte order.
100         * </p>
101         * <p>
102         * Every implementation of the Java platform is required to support this character encoding.
103         * </p>
104         * 
105         * @see <a href="http://java.sun.com/j2se/1.3/docs/api/java/lang/package-summary.html#charenc">JRE character
106         *      encoding names</a>
107         */
108        public static final String UTF_16LE = "UTF-16LE";
109    
110        /**
111         * <p>
112         * Eight-bit Unicode Transformation Format.
113         * </p>
114         * <p>
115         * Every implementation of the Java platform is required to support this character encoding.
116         * </p>
117         * 
118         * @see <a href="http://java.sun.com/j2se/1.3/docs/api/java/lang/package-summary.html#charenc">JRE character
119         *      encoding names</a>
120         */
121        public static final String UTF_8 = "UTF-8";
122    
123        /**
124         * <p>
125         * Returns whether the named charset is supported.
126         * </p>
127         * <p>
128         * This is similar to <a
129         * href="http://java.sun.com/j2se/1.4.2/docs/api/java/nio/charset/Charset.html#isSupported(java.lang.String)">
130         * java.nio.charset.Charset.isSupported(String)</a>
131         * </p>
132         * 
133         * @param name
134         *            the name of the requested charset; may be either a canonical name or an alias
135         * @return <code>true</code> if, and only if, support for the named charset is available in the current Java
136         *         virtual machine
137         * 
138         * @see <a href="http://java.sun.com/j2se/1.3/docs/api/java/lang/package-summary.html#charenc">JRE character
139         *      encoding names</a>
140         */
141        public static boolean isSupported(String name) {
142            if (name == null) {
143                return false;
144            }
145            try {
146                new String(ArrayUtils.EMPTY_BYTE_ARRAY, name);
147            } catch (UnsupportedEncodingException e) {
148                return false;
149            }
150            return true;
151        }
152    
153    }