Skip to content →

URL Decoding

The charset of the form page is ISO-8859-15'. HTTP will encode the form message in URLEncoding, that is, space is replaced with +’; non-ASCII characters are encoded inthe format %XX', where XX’ stands for the hexadecimal value of the character.

The URL decoder in this system looks as follows:

importjava.io.UnsupportedEncodingException;
import java.util.Vector;
import java.util.logging.Level;
import java.util.logging.Logger;

/**
 * UrlDecoder decodes URL encoded information into quoted printable characters.
 * 
 * @author Daoyuan Li
 */
public class UrlDecoder {

    /**
     * Decode from URL encoding to quoted printable.
     * @param url URL encoded message to be decoded.
     * @return Decoded quoted printable string.
     * @throwsException If anything wrong happens, an Exception is thrown.
     */
    public String decode(String url) throws Exception {
        String decoded = "";
        Exception ex = new Exception();
        Vector buf = new Vector();
        for (int i = 0; i < url.length(); i++) {
            if (url.charAt(i) == '%') {
                if (i + 2 >= url.length()) {
                    throw ex;
                }

                int d = -1;
try {
                    d = Integer.parseInt(url.substring(i + 1, i + 3), 16);
                } catch (NumberFormatException e) {
                    throw ex;
                }
                if (d > 255 || d < 0) {
                    throw ex;
                }
                buf.add(new Byte((byte)d));
                i += 2;
            } else if (url.charAt(i) == '+') {
                buf.add(new Byte((byte)' '));
} else {
                buf.add(new Byte((byte) url.charAt(i)));
            }
        }
        try {
            byte[] dcd = new byte[buf.size()];
            for (int j = 0; j < dcd.length; j++) {
                dcd[j] = buf.elementAt(j);
            }
            decoded = new String(dcd, "ISO-8859-1");
        } catch (UnsupportedEncodingException e) {
            Logger.getLogger(FormValidator.class.getName()).log(Level.SEVERE, null,e);
            throw ex;
        }
        return decoded;
    }
}

Published in Webmail

Comments

    Leave a Reply

    Your email address will not be published. Required fields are marked *

    This site uses Akismet to reduce spam. Learn how your comment data is processed.