Remplacer des espaces avec% 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");
De 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 j'obtiens un message d'erreur indiquant :
java.net.MalformedURLException: Illegal character in URL
Peut quelqu'un m'aider ..
source d'informationauteur user3742241
Vous devez vous connecter pour publier un commentaire.
(Note: voir la Note de mise à jour ci-dessous)
Utiliser le
URLEncoder
classe à partir de lajava.net
paquet. Les espaces ne sont pas les seuls caractères qui doivent être échappés dans les Url, et leURLEncoder
sera assurez-vous que tous les caractères doivent être encodés sont correctement codés.Voici un petit exemple:
Mise à jour
Comme l'a souligné dans les commentaires et d'autres réponses à cette question, le
URLEncoder
classe n'est sûr pour encoder les paramètres de chaîne de requête de l'URL. Je suis actuellement compter sur Goyave estUrlEscapers
en toute sécurité de coder les différentes parties d'une URL.Vous ne devez pas appeler
String.replaceAll
pour coder une URL, vous devez plutôt utiliserjava.net.URLEncoder.encode(String s, String enc)
.Note que vous avez seulement besoin d'encoder les paramètres de chaîne de requête (nom et valeur) et non la totalité de l'URL.
Lors de l'encodage d'une Chaîne à l'aide de
java.net.URLEncoder.encode(String s, String enc)
les règles suivantes s'appliquent:grâce à "9" restent les mêmes.
ou plusieurs octets à l'aide de certaines schéma de codage. Chaque octet est
représenté par le 3-chaîne de caractères "%xy", où xy est le
hexadécimal à deux chiffres de la représentation de l'octet. Le recommandé schéma de codage à utiliser est de l'UTF-8. Cependant, pour des raisons de compatibilité,
si l'encodage n'est pas spécifié, alors le codage par défaut de l'
la plateforme utilisée.
Voir URLEncoder
Ex:
Voici la réponse qui m'a aidé: HTTP Adresse URL de Codage en Java
De son tout en utilisant
URL
&URI
objets.Original de l'approche mentionnée ci-dessus dans ce thread avec
URLEncoder
de les encoder tous les caractères dans l'url, y comprishttp://
et l'utilisation de cesurl
jetaitexception
danshttpConnection
- donc ce n'est pas une bonne option. Je suis maintenant en utilisantURL/URI
approche mentionné dans le lien, et il fonctionne comme prévu.java.net.URLEncoder.encode("Hello World", "UTF-8").replaceAll("\\+", "%20"));
bonne journée =).