web-dev-qa-db-fra.com

comment faire pour encoder dans Android?

J'utilise l'affichage en grille pour l'affichage des images à l'aide de l'analyse XML, j'ai une exception comme 

Java.lang.IllegalArgumentException: Caractère illégal dans le chemin d'accès à indice 80: http://www.theblacksheeponline.com/party_img/thumbspps/912big_361999096_Flicking Hors Douchebag.jpg

Comment résoudre ce problème? Je veux afficher toutes sortes d'URL, tout le monde sait s'il vous plaît donnez un exemple de code pour moi.

Merci a tous

17
sivaraj

Le codage d’URL se fait de la même manière sur Android que dans 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();
} 
28
Cpt.Ohlund

Aussi, vous pouvez utiliser cette

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

c'est la méthode la plus simple

13
Jedo

Comme Ben le dit dans son commentaire, vous ne devez pas utiliser URLEncoder.encode pour les URL complètes, car vous allez modifier la sémantique de l’URL selon l’exemple suivant, à partir du W3C

Les URI http://www.w3.org/albert/bertram/marie-claude et http://www.w3.org/albert/bertram%2Fmarie-claude ne sont PAS identiques, comme dans le second le cas où la barre oblique codée n'a pas signification hiérarchique.

Au lieu de cela, vous devriez coder les composants d’une URL indépendamment de ce qui suit de RFC 3986 Section 2.4

Dans des circonstances normales, le seul heure à laquelle les octets dans un URI sont Pourcentage codé pendant le processus de produire l'URI à partir de son composants. C'est quand un la mise en œuvre détermine lequel des les caractères réservés doivent être utilisés comme délimiteurs de sous-composants et qui peuvent être utilisé en toute sécurité comme données. Une fois que produit, un URI est toujours dans son forme codée en pourcentage.

En bref, pour votre cas, vous devriez encoder/échapper votre nom de fichier, puis assembler l'URL.

5
BitMask777

Vous n'encodez pas l'URL entière, mais seulement des parties de celle-ci qui proviennent de "sources non fiables" comme.

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

URLEncoder ne doit être utilisé que pour encoder des requêtes, utilisez Java.net.URI class à la place:

 URI uri = nouvel URI (
 "Http", 
 "Www.theblacksheeponline.com", 
 "/ Party_img/thumbspps/912big_361999096_Flicking Off Douchebag.jpg", 
 Null) ;
 String request = uri.toASCIIString (); 
1
Oleg Smirnov

vous pouvez utiliser la méthode ci-dessous

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

J'ai essayé avec URLEncoder d'ajouter le signe (+) à la place de (""), mais cela ne fonctionnait pas et obtenait une erreur 404 url ​​not found.

Ensuite, j'ai cherché sur Google pour obtenir une meilleure réponse et j'ai trouvé ceci et son fonctionnement génial.

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

Cette façon de coder l’URL est très utile car, en utilisant une URL, nous pouvons séparer l’URL en différentes parties. Il n’est donc pas nécessaire d’effectuer une opération de chaîne.

Ensuite, deuxième classe d'URI, cette approche tire parti de la fonctionnalité de classe d'URI permettant d'échapper correctement aux composants lorsque vous créez un URI via des composants plutôt qu'à partir d'une seule chaîne.

0
Krunal Shah