您如何在Android中编码URL ?
我以为是这样的:
1final String encodedURL = URLEncoder.encode(urlAsString, "UTF-8"); 2URL url = new URL(encodedURL);
如果我做了上述情况, http://在urlAsString被替换http%3A%2F%2F在encodedURL ,然后我得到一个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楼
你也可以用这个
1private static final String ALLOWED_URI_CHARS = "@#&=*+-_.,:!?()/~'%"; 2String urlEncoded = Uri.encode(path, ALLOWED_URI_CHARS);
这是最简单的方法
#3楼
1try { 2 query = URLEncoder.encode(query, "utf-8"); 3 } catch (UnsupportedEncodingException e) { 4 // TODO Auto-generated catch block 5 e.printStackTrace(); 6 }
#4楼
您无需对整个URL进行编码,而仅对其中一部分来自“不可靠的来源”进行编码。
1String query = URLEncoder.encode("apples oranges", "utf-8"); 2String url = "http://stackoverflow.com/search?q=" + query;
另外,您可以使用不引发检查异常的DroidParts的 Strings.urlEncode(String str) 。
或使用类似
1String uri = Uri.parse("http://...") 2 .buildUpon() 3 .appendQueryParameter("key", "val") 4 .build().toString();
#5楼
您可以使用以下方法
1public static String parseUrl(String surl) throws Exception 2{ 3 URL u = new URL(surl); 4 return new URI(u.getProtocol(), u.getAuthority(), u.getPath(), u.getQuery(), u.getRef()).toString(); 5}
要么
1public String parseURL(String url, Map<String, String> params) 2{ 3 Builder builder = Uri.parse(url).buildUpon(); 4 for (String key : params.keySet()) 5 { 6 builder.appendQueryParameter(key, params.get(key)); 7 } 8 return builder.build().toString(); 9}
第二个比第一个好。