Java URL Decode decode(String s, boolean formDecode)

Here you can find the source of decode(String s, boolean formDecode)

Description

decode

License

Open Source License

Declaration

private static String decode(String s, boolean formDecode) 

Method Source Code


//package com.java2s;
/*//  w w w  .j  a v  a  2 s . c om
 * Copyright (c) 2013 Game Salutes.
 * All rights reserved. This program and the accompanying materials
 * are made available under the terms of the GNU Lesser Public License v3
 * which accompanies this distribution, and is available at
 * http://www.gnu.org/licenses/lgpl.html
 * 
 * Contributors:
 *     Game Salutes - Repackaging and modifications of original work under University of Chicago and Apache License 2.0 shown below
 * 
 * Repackaging from edu.uchicago.nsit.iteco.utils to com.gamesalutes.utils
 * 
 * Copyright 2008 - 2011 University of Chicago
 * 
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 * 
 *     http://www.apache.org/licenses/LICENSE-2.0
 * 
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 ******************************************************************************/

import java.io.UnsupportedEncodingException;

import java.net.URLDecoder;

import java.util.LinkedHashMap;
import java.util.Map;

public class Main {
    private static final String ENC = "UTF-8";

    private static String decode(String s, boolean formDecode) {
        if (s == null)
            return null;
        if (formDecode)
            return formDecode(s);
        return urlDecode(s);
    }

    /**
     * Decodes <code>s</code> that has been form-encoded using the 
     * MIME <code>application/x-www-form-urlencoded</code> type.
     * 
     * @param s the form-encoded string
     * @return the decoded string
     */
    public static String formDecode(String s) {
        if (s == null)
            return null;

        try {
            return URLDecoder.decode(s, ENC);
        } catch (UnsupportedEncodingException e) {
            throw new AssertionError(e);
        }
    }

    /**
     * Decodes the parameters of a query string using either url encoding (rfc1738) or form encoding and returns
     * them as a <code>Map</code>.
     * 
     * @param query the parameters to encode
     * @param formDecode <code>true</code> to form-encode and <code>false</code> to url encode
     * @return the decoded parameters
     */
    public static Map<String, String> urlDecode(String query, boolean formDecode) {
        if (query == null)
            return null;

        // split along the "&"
        String[] entries = query.split("&");
        Map<String, String> params = new LinkedHashMap<String, String>();

        for (String entry : entries) {
            // split along the "="
            String[] keyValue = entry.split("=");
            if (keyValue.length != 2)
                throw new IllegalArgumentException("query=" + query + "; invalid entry=" + entry);

            params.put(decode(keyValue[0], formDecode), decode(keyValue[1], formDecode));
        }

        return params;
    }

    /**
     * Url-decodes the path part of a http url according to <code>rfc1738</code>. If an url form-decoding
     * is required, use <code>formDecode</code>.
     * 
     * @param s the path string
     * @return the url-decoded path string
     */
    public static String urlDecode(String s) {
        if (s == null)
            return null;

        StringBuilder dec = new StringBuilder(s.length() * 2);

        for (int i = 0; i < s.length(); ++i) {
            char c = s.charAt(i);
            if (c != '%')
                dec.append(c);
            else // decode
            {
                if (i + 2 >= s.length())
                    throw new IllegalArgumentException("s=" + s);

                int c1 = s.charAt(++i);
                int c2 = s.charAt(++i);
                // convert to hex int
                if (c1 >= 'A')
                    c1 = c1 - 'A' + 10;
                else
                    c1 -= '0';

                if (c2 >= 'A')
                    c2 = c2 - 'A' + 10;
                else
                    c2 -= '0';

                // convert to dec
                char d = (char) (c1 * 16 + c2);

                dec.append(d);

            }
        } // for

        return dec.toString();
    }
}

Related

  1. decode(String s)
  2. decode(String s)
  3. decode(String s)
  4. decode(String s)
  5. decode(String s)
  6. decode(String s, String enc)
  7. decode(String source)
  8. decode(String source, String encoding)
  9. decode(String source, String encoding)