web-dev-qa-db-fra.com

Remplacement d'espaces par% 20 en java

String url = "http://maps.googleapis.com/maps/api/distancematrix/xml?origins="+Origin+"&destinations="+destination+"&mode=driving&sensor=false&language=en-EN&units=imperial";
url = url.replaceAll(" ", "%20");

Sortie: 

http://maps.googleapis.com/maps/api/distancematrix/xml?origins=150%20Sutter%20St%20San%20Francisco,%20CA,%20United%20States&destinations=1%20Palmer%20Sq%20E
Princeton,%20NJ%2008542&mode=driving&sensor=false&language=en-EN&units=imperial

Mais je reçois une erreur en disant: 

Java.net.MalformedURLException: Illegal character in URL

Est-ce que quelqu'un peut m'aider ..

19
user3742241

(Remarque: voir la mise à jour ci-dessous)

Utilisez le URLEncoder class du paquetage Java.net. Les espaces ne sont pas les seuls caractères à échapper des URL, et la variable URLEncoder s'assurera que tous les caractères à coder le sont correctement.

Voici un petit exemple:

String url = "http://...";
String encodedUrl = null;

try {
    encodedUrl = URLEncoder.encode(url, "UTF-8");
} catch (UnsupportedEncodingException ignored) {
    // Can be safely ignored because UTF-8 is always supported
}

Mettre à jour

Comme indiqué dans les commentaires et autres réponses à cette question, la classe URLEncoder ne permet de coder que les paramètres de chaîne de requête d'une URL. Je compte actuellement sur UrlEscapers de Guava pour coder en toute sécurité différentes parties d'une URL.

17
Robby Cornelissen

Vous ne devriez pas appeler String.replaceAll pour coder une URL, mais plutôt Java.net.URLEncoder.encode(String s, String enc).

Notez que vous devez uniquement encoder les paramètres de la chaîne de requête (nom et valeur) et non l'URL complète.

Lors du codage d'une chaîne à l'aide de Java.net.URLEncoder.encode(String s, String enc), les règles suivantes s'appliquent:

  • Les caractères alphanumériques "a" à "z", "A" à "Z" et "0" À "9" restent les mêmes. 
  • Les caractères spéciaux ".", "-", "*" et "_" restent les mêmes.
  • Le caractère d'espace "" est converti en un signe plus "+".
  • Tous les autres caractères sont dangereux et sont d'abord convertis en un ou plusieurs octets à l'aide d'un schéma de codage. Chaque octet est alors représenté par la chaîne "% xy" à trois caractères, où xy est la représentation hexadécimale à deux chiffres De l'octet. Le schéma de codage recommandé est UTF-8. Cependant, pour des raisons de compatibilité, si un codage n’est pas spécifié, le codage par défaut de
    plate-forme est utilisée.

Voir URLEncoder

Ex:

String url = "http://maps.googleapis.com/maps/api/distancematrix/xml?origins=" + URLEncoder.encode(Origin, "UTF-8");
11
M. Abbas

Voici la réponse qui m'a aidé: Encodage d'adresse URL HTTP en Java

Son juste en utilisant URL & URI__ objets.

L’application originale mentionnée ci-dessus dans cette discussion avec URLEncoder, codait tous les caractères dans l’url, y compris http://, et l’utilisation de cette url jetait exception dans httpConnection - n’est donc pas une bonne option. J'utilise maintenant l'approche URL/URI mentionnée dans le lien et cela fonctionne comme prévu.

5
To Kra

Java.net.URLEncoder.encode("Hello World", "UTF-8").replaceAll("\\+", "%20")); ayez une belle journée =).

4
Pregunton

Essayer 

str.replaceAll("\\s","%20");

Cela devrait résoudre le problème

0
Sunit Mishra