Vos composants, contenant potentiellement des caractères qui doivent être échappés, devraient déjà avoir été échappés en utilisant URLEncoder avant d'être concaténés en URI. Si vous avez un URI avec des caractères hors bande dans (comme espace, "<> [] {} \ | ^`, et octets non-ASCII), ce n'est pas vraiment un URI. les corriger manuellement en les désactivant, mais il s'agit d'une opération de correction de dernier niveau et non d'un codage standard, ce qui est généralement nécessaire lorsque vous acceptez des URI potentiellement mal formés à partir des entrées utilisateur, mais ce n'est pas un standard. opération et je ne connais pas de fonction de bibliothèque Java intégrée qui le fera pour vous, vous devrez peut-être pirater quelque chose avec un RegExp
Dans l'autre sens, vous devez séparer votre URI dans ses parties composantes (chaque partie de chemin distincte, le nom et la valeur du paramètre de requête, etc.) avant que vous puissiez annuler l'échappement de chaque partie (à l'aide d'un URLDecoder). Il n'y a aucun moyen sensé de% -décoder un URI entier en une fois; vous pouvez essayer de 'décoder% -escapes qui ne décodent pas en délimiteurs' (comme /? = &;%) mais vous vous retrouverez avec une chaîne incohérente étrange qui n'est pas conforme à un standard de traitement d'URI. Les paramètres URLEncoder/URLDecoder conviennent à la gestion des composants de requête URI, à la fois les noms et les valeurs. Cependant, ils ne sont pas exactement pour gérer les composants de la partie du chemin de l'URI. La différence est que le caractère '+' ne signifie pas un espace dans une partie de chemin. Vous pouvez corriger cela avec une simple chaîne replace: après URLEncoding, remplacez '+' par '% 20'; avant URLDecoding, remplacez '+' par '% 2B'. Vous pouvez ignorer la différence si vous ne prévoyez pas d'inclure des segments contenant des espaces ou des plus dans votre chemin.
est-ce pas l'application/x-www-form-urlencoded la même chose? –
Non, ce n'est pas le cas. L'encodage RFC2396 n'est pas le même que l'encodage pour les données de formulaire HTML. – Gili
Voir http://stackoverflow.com/questions/444112/how-do-i-encode-uri-parameter-values il y a peu de réponses. –