Vous devriez en fait URI-encode les caractères "invalides". Comme la chaîne contient en fait l'URL complète, il est difficile de la coder correctement en URI. Vous ne savez pas quelles barres obliques /
doivent être pris en compte et ceux qui ne le sont pas. Vous ne pouvez pas prédire cela sur une String
à l'avance. Le problème doit vraiment être résolu à un niveau supérieur. Où est-ce que String
venir ? Est-il codé en dur ? Il suffit alors de le modifier vous-même en conséquence. Est-ce qu'il provient d'une entrée utilisateur ? Validez-la et montrez l'erreur, laissez l'utilisateur résoudre lui-même le problème.
De toute façon, si vous pouvez vous assurer qu'il est sólo les espaces dans les URLs qui les rendent invalides, alors vous pouvez aussi simplement faire un remplacement chaîne par chaîne avec %20
:
URI uri = new URI(string.replace(" ", "%20"));
Ou si vous pouvez vous assurer que c'est sólo la partie après le dernier slash qui doit être encodée en URI, vous pouvez également le faire à l'aide de la fonction android.net.Uri
classe d'utilité :
int pos = string.lastIndexOf('/') + 1;
URI uri = new URI(string.substring(0, pos) + Uri.encode(string.substring(pos)));
Notez bien que URLEncoder
n'est pas adapté à cette tâche, car il est conçu pour coder les noms/valeurs des paramètres de la chaîne de requête conformément à l'article 3.1.1 du règlement. application/x-www-form-urlencoded
(telles qu'utilisées dans les formulaires HTML). Voir aussi Codage Java URL des paramètres de la chaîne d'interrogation .