rev version
[lwes-java.git] / src / org / lwes / util / CharacterEncoding.java
bloba8b1c5bb57305c73f874ccd1f47e1e9cad8539ef
1 package org.lwes.util;
3 import java.io.UnsupportedEncodingException;
4 import java.util.HashMap;
6 /**
7 * This is a little class to abstract the character encoding strings that Java
8 * uses into classes which can be checked at compile time.
10 * @author Kevin Scaldeferri
12 public abstract class CharacterEncoding {
14 // static loading
15 private static final HashMap<String, CharacterEncoding> ENCODING_HASH = new HashMap<String, CharacterEncoding>();
16 private static final String CANONICAL_ASCII_NAME = "ASCII";
17 private static final String CANONICAL_ISO_8859_1_NAME = "ISO8859_1";
18 private static final String CANONICAL_UTF_8_NAME = "UTF8";
19 private static final String CANONICAL_SHIFT_JIS_NAME = "SJIS";
20 private static final String CANONICAL_EUC_JP_NAME = "EUC_JP";
21 private static final String CANONICAL_EUC_KR_NAME = "EUC_KR";
22 private static final String[] ASCII_ALIASES = { CANONICAL_ASCII_NAME,
23 "US-ASCII", "ISO646-US" };
24 private static final String[] ISO_8859_1_ALIASES = {
25 CANONICAL_ISO_8859_1_NAME, "ISO-8859-1", "ISO-LATIN-1", "8859_1" };
26 private static final String[] UTF_8_ALIASES = { CANONICAL_UTF_8_NAME,
27 "UTF-8" };
28 private static final String[] SHIFT_JIS_ALIASES = {
29 CANONICAL_SHIFT_JIS_NAME, "SHIFTJIS", "SHIFT-JIS", "SHIFT_JIS" };
30 private static final String[] EUC_JP_ALIASES = { CANONICAL_EUC_JP_NAME,
31 "EUC-JP" };
32 private static final String[] EUC_KR_ALIASES = { CANONICAL_EUC_KR_NAME,
33 "EUC-KR" };
36 * Returns Java's canonical form of the encoding.
38 public abstract String getEncodingString();
41 * Returns the official IANA name for the encoding. Everything expect Java
42 * expects this form.
44 public abstract String getIANAString();
46 public static final CharacterEncoding ISO_8859_1 = new CharacterEncoding() {
47 public String getEncodingString() {
48 return "ISO-8859-1";
51 public String getIANAString() {
52 return "ISO-8859-1";
56 public static final CharacterEncoding UTF_8 = new CharacterEncoding() {
57 public String getEncodingString() {
58 return "UTF-8";
61 public String getIANAString() {
62 return "UTF-8";
66 public static final CharacterEncoding ASCII = new CharacterEncoding() {
67 public String getEncodingString() {
68 return "ASCII";
71 public String getIANAString() {
72 return "US-ASCII";
76 public static final CharacterEncoding SHIFT_JIS = new CharacterEncoding() {
77 public String getEncodingString() {
78 return "SJIS";
81 public String getIANAString() {
82 return "Shift_JIS";
86 public static final CharacterEncoding EUC_JP = new CharacterEncoding() {
87 public String getEncodingString() {
88 return "EUC_JP";
91 public String getIANAString() {
92 return "EUC-JP";
96 public static final CharacterEncoding EUC_KR = new CharacterEncoding() {
97 public String getEncodingString() {
98 return "EUC_KR";
101 public String getIANAString() {
102 return "EUC-KR";
107 * This is a highly limited implementation at the moment, so don't expect
108 * too much from it.
109 * @param enc the String representation of the encoding.
110 * @return CharacterEncoding
111 * @throws java.io.UnsupportedEncodingException if the encoding doesnt exist.
113 public static CharacterEncoding getInstance(String enc)
114 throws UnsupportedEncodingException {
115 if (ENCODING_HASH.containsKey(enc.toUpperCase())) {
116 return ENCODING_HASH.get(enc.toUpperCase());
117 } else {
118 throw new UnsupportedEncodingException(enc);
122 @Override
123 public int hashCode() {
124 return getEncodingString().hashCode();
127 public boolean equals(Object o) {
128 return (o instanceof CharacterEncoding)
129 && getEncodingString().equals(((CharacterEncoding) o).getEncodingString());
132 static {
133 int i;
134 for (i = 0; i < ASCII_ALIASES.length; i++) {
135 ENCODING_HASH.put(ASCII_ALIASES[i], ASCII);
137 for (i = 0; i < ISO_8859_1_ALIASES.length; i++) {
138 ENCODING_HASH.put(ISO_8859_1_ALIASES[i], ISO_8859_1);
140 for (i = 0; i < UTF_8_ALIASES.length; i++) {
141 ENCODING_HASH.put(UTF_8_ALIASES[i], UTF_8);
143 for (i = 0; i < SHIFT_JIS_ALIASES.length; i++) {
144 ENCODING_HASH.put(SHIFT_JIS_ALIASES[i], SHIFT_JIS);
146 for (i = 0; i < EUC_JP_ALIASES.length; i++) {
147 ENCODING_HASH.put(EUC_JP_ALIASES[i], EUC_JP);
149 for (i = 0; i < EUC_KR_ALIASES.length; i++) {
150 ENCODING_HASH.put(EUC_KR_ALIASES[i], EUC_KR);