Comment puis-je conserver l'encodage dans l'argument lors de l'utilisation MessageFormat en Java
-
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?
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.