* @author adam@ibex.org
*/
public final class Encode {
+
+ public static class QuotedPrintable {
+ public static String decode(String s, boolean lax) {
+ //
+ // =XX -> hex representation, must be uppercase
+ // 9, 32, 33-60, 62-126 can be literal
+ // 9, 32 at end-of-line must get encoded
+ // trailing whitespace must be deleted when decoding
+ // =\n = soft line break
+ // lines cannot be more than 76 chars long
+ //
+
+ // lax is used for RFC2047 headers; removes restrictions on which chars you can encode
+ return s;
+ }
+ }
+
+
+ public static class RFC2047 {
+ public static String decode(String s) {
+ /*
+ try { while (s.indexOf("=?") != -1) {
+ String pre = s.substring(0, s.indexOf("=?"));
+ s = s.substring(s.indexOf("=?") + 2);
+
+ // MIME charset; FIXME use this
+ String charset = s.substring(0, s.indexOf('?')).toLowerCase();
+ s = s.substring(s.indexOf('?') + 1);
+
+ String encoding = s.substring(0, s.indexOf('?')).toLowerCase();
+ s = s.substring(s.indexOf('?') + 1);
+
+ String encodedText = s.substring(0, s.indexOf("?="));
+
+ if (encoding.equals("b")) encodedText = new String(Base64.decode(encodedText));
+
+ // except that ANY char can be endoed (unlike real qp)
+ else if (encoding.equals("q")) encodedText = MIME.QuotedPrintable.decode(encodedText, true);
+ else Log.warn(MIME.class, "unknown RFC2047 encoding \""+encoding+"\"");
+
+ String post = s.substring(s.indexOf("?=") + 2);
+ s = pre + encodedText + post;
+
+ // FIXME re-encode when transmitting
+
+ } } catch (Exception e) {
+ Log.warn(MIME.class, "error trying to decode RFC2047 encoded-word: \""+s+"\"");
+ Log.warn(MIME.class, e);
+ }
+ */
+ return s;
+ }
+ }
+
+
+ public static long twoFloatsToLong(float a, float b) {
+ return ((Float.floatToIntBits(a) & 0xffffffffL) << 32) | (Float.floatToIntBits(b) & 0xffffffffL); }
+ public static float longToFloat1(long l) { return Float.intBitsToFloat((int)((l >> 32) & 0xffffffff)); }
+ public static float longToFloat2(long l) { return Float.intBitsToFloat((int)(l & 0xffffffff)); }
+
private static final char[] fn =
new char[] { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f' };
public static byte[] toBase64(String data) { return toBase64(data.getBytes()); }
+ public static String toBase64String(byte[] data) { return new String(toBase64(data)); }
+
/** Encode the input data producong a base 64 encoded byte array.
* @return A byte array containing the base 64 encoded data. */
public static byte[] toBase64(byte[] data) {