how to url encode in android?

大城市里の小女人 提交于 2019-11-26 20:13:53

问题


I am using grid view for displaying image using xml parsing,i got some exception like

java.lang.IllegalArgumentException: Illegal character in path at index 80: http://www.theblacksheeponline.com/party_img/thumbspps/912big_361999096_Flicking Off Douchebag.jpg

How to solve this problem? I want to display all kind of url,anybody knows please give sample code for me.

Thanks All


回答1:


URL encoding is done in the same way on android as in Java SE;

try {
    String url = "http://www.example.com/?id=123&art=abc";
    String encodedurl = URLEncoder.encode(url,"UTF-8");
    Log.d("TEST", encodedurl);
} catch (UnsupportedEncodingException e) {
    e.printStackTrace();
} 



回答2:


Also you can use this

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

it's the most simple method




回答3:


As Ben says in his comment, you should not use URLEncoder.encode to full URLs because you will change the semantics of the URL per the following example from the W3C:

The URIs http://www.w3.org/albert/bertram/marie-claude and http://www.w3.org/albert/bertram%2Fmarie-claude are NOT identical, as in the second case the encoded slash does not have hierarchical significance.

Instead, you should encode component parts of a URL independently per the following from RFC 3986 Section 2.4

Under normal circumstances, the only time when octets within a URI are percent-encoded is during the process of producing the URI from its component parts. This is when an implementation determines which of the reserved characters are to be used as subcomponent delimiters and which can be safely used as data. Once produced, a URI is always in its percent-encoded form.

So, in short, for your case you should encode/escape your filename and then assemble the URL.




回答4:


You don't encode the entire URL, only parts of it that come from "unreliable sources" like.

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



回答5:


URLEncoder should be used only to encode queries, use java.net.URI class instead:

URI uri = new URI(
    "http",
    "www.theblacksheeponline.com", 
    "/party_img/thumbspps/912big_361999096_Flicking Off Douchebag.jpg",
    null);
String request = uri.toASCIIString();



回答6:


you can use below method

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



回答7:


I tried with URLEncoder that added (+) sign in replace of (" "), but it was not working and getting 404 url not found error.

Then i googled for get better answer and found this and its working awesome.

String urlStr = "http://www.example.com/test/file name.mp4";
URL url = new URL(urlStr);
URI uri = new URI(url.getProtocol(), url.getUserInfo(), url.getHost(), url.getPort(), url.getPath(), url.getQuery(), url.getRef());
url = uri.toURL();

This way of encoding url its very useful because using of URL we can separate url into different part. So, there is no need to perform any string operation.

Then second URI class, this approach takes advantage of the URI class feature of properly escaping components when you construct a URI via components rather than from a single string.




回答8:


I recently wrote a quick URI encoder for this purpose. It even handles unicode characters. http://www.dmurph.com/2011/01/java-uri-encoder/



来源:https://stackoverflow.com/questions/3734844/how-to-url-encode-in-android

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