如何在Android中编码URL ?

我以为是这样的:

final String encodedURL = URLEncoder.encode(urlAsString, "UTF-8");
URL url = new URL(encodedURL);

如果我这样做,urlAsString中的http://将被encodedURL中的http%3A%2F%2F取代,然后当我使用URL时,我会得到一个java.net.MalformedURLException。


当前回答

你也可以用这个

private static final String ALLOWED_URI_CHARS = "@#&=*+-_.,:!?()/~'%";
String urlEncoded = Uri.encode(path, ALLOWED_URI_CHARS);

这是最简单的方法

其他回答

对于android,我会使用 android.net.Uri.encode(字符串s)

使用UTF-8方案将给定字符串中的字符编码为'%'-转义字节。叶子字母(“a - z”、“a - z”),数字(0 - 9)和无限制的字符 ("_-!.~'()*") 完好无损。编码所有其他字符。

Ex/

String urlEncoded = "http://stackoverflow.com/search?q=" + Uri.encode(query);

您可以使用以下方法

public static String parseUrl(String surl) throws Exception
{
    URL u = new URL(surl);
    return new URI(u.getProtocol(), u.getAuthority(), u.getPath(), u.getQuery(), u.getRef()).toString();
}

or

public String parseURL(String url, Map<String, String> params)
{
    Builder builder = Uri.parse(url).buildUpon();
    for (String key : params.keySet())
    {
        builder.appendQueryParameter(key, params.get(key));
    }
    return builder.build().toString();
}

第二个比第一个好。

你也可以用这个

private static final String ALLOWED_URI_CHARS = "@#&=*+-_.,:!?()/~'%";
String urlEncoded = Uri.encode(path, ALLOWED_URI_CHARS);

这是最简单的方法

try {
                    query = URLEncoder.encode(query, "utf-8");
                } catch (UnsupportedEncodingException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }

找到阿拉伯字符并将其替换为UTF-8编码。 像这样的事情:

for (int i = 0; i < urlAsString.length(); i++) {
    if (urlAsString.charAt(i) > 255) {
        urlAsString = urlAsString.substring(0, i) + URLEncoder.encode(urlAsString.charAt(i)+"", "UTF-8") + urlAsString.substring(i+1);
    }
}
encodedURL = urlAsString;