¿Cómo conservo la codificación en el argumento al usar MessageFormat en Java?
-
27-10-2019 - |
Pregunta
Estoy tratando de usar MessageFormat
como sigue,
String downloadsUrl = "http://host/downloads?tags={0}";
Object[] formatArgs = {"sequence%20diagram"};
String url = new MessageFormat(downloadsUrl).format(formatArgs);
Sin embargo, cuando miro la cadena de URL final, es,http: // host/descargas? etiquetas = secuencia diagrama
¿Hay alguna vez para retener el %20 y no hacer que MessageFormat lo reemplace con un espacio?
Solución
El código que proporcionó no agrega el espacio El código anterior devuelve "http: // host/downloads? Etiquetas = secuencia%20diagram"
Su servlet objetivo está haciendo la sustitución. Lo que se asigne a lo que se asigne "/descargas" está analizando el parámetro de etiquetas y realizar decodificaciones de URL. Puede reconstruir posibles codificaciones de la siguiente manera. Deberá manejar la concepción no compatible deCodingException a continuación.
String encoded = URLEncoder.encode( request.getParameter( name ), "UTF8" );
Desafortunadamente, esta es solo una posible codificación y, por defecto, convertirá los espacios en "+". Para recuperar el "%20", deberá recurrir a
encoding = encoding.replaceAll( "+", "%20" );
Esto puede funcionar para usted o no. En general, es más aconsejable normalizar el valor decodificado en lugar del valor codificado, ya que hay muchas codificaciones posibles por valor decodificado.
Otros consejos
Residencia en este Voy a adivinar poner cotizaciones individuales en torno al valor funcionaría ...