1adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project/*
2adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project *  Licensed to the Apache Software Foundation (ASF) under one or more
3adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project *  contributor license agreements.  See the NOTICE file distributed with
4adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project *  this work for additional information regarding copyright ownership.
5adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project *  The ASF licenses this file to You under the Apache License, Version 2.0
6adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project *  (the "License"); you may not use this file except in compliance with
7adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project *  the License.  You may obtain a copy of the License at
8adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project *
9adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project *     http://www.apache.org/licenses/LICENSE-2.0
10adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project *
11adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project *  Unless required by applicable law or agreed to in writing, software
12adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project *  distributed under the License is distributed on an "AS IS" BASIS,
13adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project *  See the License for the specific language governing permissions and
15adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project *  limitations under the License.
16adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */
17adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
18adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectpackage java.net;
19adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
20adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.io.UnsupportedEncodingException;
21f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilsonimport java.nio.charset.Charset;
2256099d23fcb002b164bff8fb7f14d6ec0453509eJesse Wilsonimport libcore.net.UriCodec;
23adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
24adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project/**
25adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * This class is used to decode a string which is encoded in the {@code
26adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * application/x-www-form-urlencoded} MIME content type.
27adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */
28adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectpublic class URLDecoder {
29adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
30adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * Decodes the argument which is assumed to be encoded in the {@code
31adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * x-www-form-urlencoded} MIME content type.
32adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * <p>
33adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *'+' will be converted to space, '%' and two following hex digit
34adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * characters are converted to the equivalent byte value. All other
35adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * characters are passed through unmodified. For example "A+B+C %24%25" ->
36adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * "A B C $%".
37f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson     *
38adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @param s
39adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *            the encoded string.
40adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @return the decoded clear-text representation of the given string.
4199b4489d0555c6e0e5df941cbfad4cf250c8f0b8Elliott Hughes     * @deprecated Use {@link #decode(String, String)} instead.
42adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
43adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    @Deprecated
44adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public static String decode(String s) {
45783631d82682027beaf80540ab08912fd56fea0cJesse Wilson        return UriCodec.decode(s, true, Charset.defaultCharset(), true);
46adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
47f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson
48adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
49adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * Decodes the argument which is assumed to be encoded in the {@code
50be4a7d686edf15a7fbdd00b40cf78cb26d105d0eElliott Hughes     * x-www-form-urlencoded} MIME content type, assuming the given {@code charsetName}.
51be4a7d686edf15a7fbdd00b40cf78cb26d105d0eElliott Hughes     *
52be4a7d686edf15a7fbdd00b40cf78cb26d105d0eElliott Hughes     *'<p>+' will be converted to space, '%' and two following hex digit
53adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * characters are converted to the equivalent byte value. All other
54adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * characters are passed through unmodified. For example "A+B+C %24%25" ->
55adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * "A B C $%".
56f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson     *
57be4a7d686edf15a7fbdd00b40cf78cb26d105d0eElliott Hughes     * @throws UnsupportedEncodingException if {@code charsetName} is not supported.
58adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
59be4a7d686edf15a7fbdd00b40cf78cb26d105d0eElliott Hughes    public static String decode(String s, String charsetName) throws UnsupportedEncodingException {
60be4a7d686edf15a7fbdd00b40cf78cb26d105d0eElliott Hughes        return UriCodec.decode(s, true, Charset.forName(charsetName), true);
61adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
62adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project}
63