Methods Summary |
---|
protected java.lang.String | decodeText(java.lang.String text)Applies an RFC 1522 compliant decoding scheme to the given string of text. This method
processes the "encoded-word" header common to all the RFC 1522 codecs and then invokes
{@link #doEncoding(byte [])} method of a concrete class to perform the specific deconding.
if (text == null) {
return null;
}
if ((!text.startsWith("=?")) || (!text.endsWith("?="))) {
throw new DecoderException("RFC 1522 violation: malformed encoded content");
}
int termnator = text.length() - 2;
int from = 2;
int to = text.indexOf("?", from);
if ((to == -1) || (to == termnator)) {
throw new DecoderException("RFC 1522 violation: charset token not found");
}
String charset = text.substring(from, to);
if (charset.equals("")) {
throw new DecoderException("RFC 1522 violation: charset not specified");
}
from = to + 1;
to = text.indexOf("?", from);
if ((to == -1) || (to == termnator)) {
throw new DecoderException("RFC 1522 violation: encoding token not found");
}
String encoding = text.substring(from, to);
if (!getEncoding().equalsIgnoreCase(encoding)) {
throw new DecoderException("This codec cannot decode " +
encoding + " encoded content");
}
from = to + 1;
to = text.indexOf("?", from);
byte[] data = text.substring(from, to).getBytes(StringEncodings.US_ASCII);
data = doDecoding(data);
return new String(data, charset);
|
protected abstract byte[] | doDecoding(byte[] bytes)Decodes an array of bytes using the defined encoding scheme
|
protected abstract byte[] | doEncoding(byte[] bytes)Encodes an array of bytes using the defined encoding scheme
|
protected java.lang.String | encodeText(java.lang.String text, java.lang.String charset)Applies an RFC 1522 compliant encoding scheme to the given string of text with the
given charset. This method constructs the "encoded-word" header common to all the
RFC 1522 codecs and then invokes {@link #doEncoding(byte [])} method of a concrete
class to perform the specific enconding.
if (text == null) {
return null;
}
StringBuffer buffer = new StringBuffer();
buffer.append("=?");
buffer.append(charset);
buffer.append('?");
buffer.append(getEncoding());
buffer.append('?");
byte [] rawdata = doEncoding(text.getBytes(charset));
buffer.append(new String(rawdata, StringEncodings.US_ASCII));
buffer.append("?=");
return buffer.toString();
|
protected abstract java.lang.String | getEncoding()Returns the codec name (referred to as encoding in the RFC 1522)
|