如何在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。
如何在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;