Android中的URL编码

主宰稳场 提交于 2020-03-13 21:06:26

您如何在Android中编码URL

我以为是这样的:

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

如果我做了上述情况, http://urlAsString被替换http%3A%2F%2FencodedURL ,然后我得到一个java.net.MalformedURLException当我使用的URL。


#1楼

对于android,我将使用String android.net.Uri.encode(String s)

使用UTF-8方案将给定字符串中的字符编码为'%'转义的八位字节。 保留字母(“ AZ”,“ az”),数字(“ 0-9”)和未保留的字符(“ _- !.〜'()*”)完整无缺。 编码所有其他字符。

例/

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

#2楼

你也可以用这个

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

这是最简单的方法


#3楼

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

#4楼

您无需对整个URL进行编码,而仅对其中一部分来自“不可靠的来源”进行编码。

String query = URLEncoder.encode("apples oranges", "utf-8");
String url = "http://stackoverflow.com/search?q=" + query;

另外,您可以使用不引发检查异常的DroidParts的 Strings.urlEncode(String str)

或使用类似

String uri = Uri.parse("http://...")
                .buildUpon()
                .appendQueryParameter("key", "val")
                .build().toString();

#5楼

您可以使用以下方法

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();
}

要么

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();
}

第二个比第一个好。

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!