Comment puis-je conserver l'encodage dans l'argument lors de l'utilisation MessageFormat en Java

StackOverflow https://stackoverflow.com/questions/8345796

  •  27-10-2019
  •  | 
  •  

Question

Je suis en train d'utiliser MessageFormat comme suit,

String downloadsUrl = "http://host/downloads?tags={0}";
Object[] formatArgs = {"sequence%20diagram"};
String url = new MessageFormat(downloadsUrl).format(formatArgs);

Cependant, quand je regarde la chaîne url finale, il est, http: // host / téléchargements tags = diagramme de séquence

Y at-il someway de conserver les 20% et pas MessageFormat le remplacer par un espace?

Était-ce utile?

La solution

Le code fourni ne pas ajouter l'espace le code ci-dessus renvoie "http: // host / téléchargements tags = séquence% 20diagram"

Votre servlet cible est en train de faire la substitution. Quels que soient « / téléchargements » est mis en correspondance est l'analyse du paramètre balises et effectuer un décodage d'URL. Vous pouvez reconstruire encodages possibles comme suit. Vous devrez gérer la UnsupportedEncodingException dans ce qui suit.

String encoded = URLEncoder.encode( request.getParameter( name ), "UTF8" );

Malheureusement, ce n'est un codage possible et par défaut convertir les espaces en « + ». Pour obtenir le « % 20 » de retour, vous devrez recourir à

encoding = encoding.replaceAll( "+", "%20" );

Cela peut fonctionner pour vous ou non. En général, il est plus judicieux de normaliser la valeur décodée au lieu de la valeur encodée car il y a beaucoup encodages possibles par valeur décodée.

Autres conseils

Basé sur ce que je vais deviner mettre des guillemets simples autour de la valeur fonctionnerait ...

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top