Encodage D'URL dans Android

comment encoder un URL sous Android?

je pensais que c'était comme ça:

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

si je fais ce qui précède, le http:// dans urlAsString est remplacé par http%3A%2F%2F dans encodedURL et puis je reçois un java.net.MalformedURLException quand j'utilise L'URL.

296
demandé sur Peter Mortensen 2010-07-20 04:10:21
la source

6 ответов

vous ne codez pas L'URL entière, seulement les parties qui proviennent de"sources non fiables".

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

alternativement, vous pouvez utiliser des chaînes .urlEncode (String) de DroidParts qui ne lance pas les exceptions vérifiées.

ou utilisez quelque chose comme

String uri = Uri.parse("http://...")
                .buildUpon()
                .appendQueryParameter("key", "val")
                .build().toString();
582
répondu yanchenko 2013-10-04 19:32:22
la source

, je vais ajouter une suggestion ici. Vous pouvez faire ceci qui évite d'avoir à obtenir des bibliothèques externes.

essayez ceci:

String urlStr = "http://abc.dev.domain.com/0007AC/ads/800x480 15sec h.264.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();

vous pouvez voir que dans cette URL particulière, j'ai besoin d'avoir ces espaces encodés de sorte que je puisse l'utiliser pour une requête.

cela profite d'un couple de fonctionnalités disponibles pour vous dans les classes Android. Tout d'abord, la classe URL peut casser une url dans ses composants appropriés afin il n'est pas nécessaire pour vous de faire une chaîne de recherche/remplacer le travail. Deuxièmement, cette approche tire avantage de la caractéristique de la classe URI qui consiste à échapper correctement les composants lorsque vous construisez un URI à l'aide de composants plutôt qu'à partir d'une seule chaîne.

la beauté de cette approche est que vous pouvez prendre n'importe quelle chaîne d'url valide et le faire fonctionner sans avoir besoin de connaissance spéciale de lui vous-même.

157
répondu Craig B 2012-01-22 21:04:51
la source

pour android, j'utiliserais String android.net.Uri.encoder (String s)

code les caractères dans la chaîne donnée comme '% ' - octets échappés en utilisant le schéma UTF-8. Laisse des lettres ("A-Z", "A-z"), des chiffres ("0-9"), et des caractères sans réserve ("_ -!.~'()*") intact. Code tous les autres caractères.

Ex /

String urlEncoded = "http://stackoverflow.com/search?q=" + Uri.encode(query);
63
répondu tanutapi 2013-06-04 08:27:32
la source

vous pouvez également utiliser ce

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

c'est la méthode la plus simple

47
répondu Jedo 2014-01-24 15:57:44
la source
try {
                    query = URLEncoder.encode(query, "utf-8");
                } catch (UnsupportedEncodingException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
2
répondu Joolah 2015-01-30 15:09:38
la source

vous pouvez utiliser les méthodes ci-dessous""

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

ou

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

le second est meilleur que le premier.

1
répondu Elango 2016-06-18 09:29:55
la source

Autres questions sur android url urlencode