Android : howto parse URL chaîne avec des espaces à objet URI ?

? Mannaz @ | Original: StackOverFlow
---

Je ai une chaîne représentant une URL contenant des espaces et je veux pour le convertir en un objet URI . Si est simple essayer de faire

String myString = "http://myhost.com/media/mp3s/9/Agenda of swine - 13. Persecution Ascension_ leave nothing standing.mp3";
URI myUri = new URI(myString);

it gives me

java.net.URISyntaxException: Illegal character in path at index X

où l'indice X est la position du premier espace dans la chaîne d'URL .

Comment puis-je analyser myString dans un URI opposer ?

---

Top 5 Répondre

1Bozho @
java.net.URLEncoder.encode(finalPartOfString, "utf-8");

Cela http://www.w3schools.com/TAGS/ref_urlencode.asp la chaîne .

«____» Est la partie après le dernier slash - dans votre cas, le nom de la chanson, comme il semble .

2BalusC @

Vous devriez en fait http://java.sun.com/javase/6/docs/api/java/net/URLEncoder.html l' http://en.wikipedia.org/wiki/Percent-encoding . Depuis la chaîne contient effectivement l'URL complète, il est difficile de bien URL -encoder . Vous ne savez pas quel barres obliques finalPartOfString devraient être prises en compte et qui ne . Vous ne pouvez pas prédire que sur une première «____» au préalable. Le problème vraiment besoin d'être résolu à un niveau supérieur . D'où vient cette «____» vient-il? Est-il codé en dur ? Ensuite, il suffit de modifier vous-même en conséquence. Ne vient que dans l'entrée d'utilisateur ? Valider et démontrer erreur, laisser l'utilisateur se résoudre .

A tout façon, si vous pouvez vous assurer que ce ne sont que les espaces dans les URL qui le rend invalide, alors vous pouvez aussi simplement faire un octet par carboniser remplacer par «____» :

URLEncode

ou une chaîne par chaîne remplacer par «____» :

/

Ou si vous pouvez vous assurer que ce est seulement la partie après le dernier slash qui doit être codé, alors vous pouvez aussi simplement faire:

String
3Phileo99 @

Pour gérer les espaces, @, et d'autres caractères dangereux dans des endroits arbitraires dans le chemin url, Uri.Builder utilisation en combinaison avec une instance locale de l'URL comme je l'ai décrit http://stackoverflow.com/a/22059606/923920 :

String
4siddmuk2005 @
+