¿Cómo conservo la codificación en el argumento al usar MessageFormat en Java?

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

  •  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?

¿Fue útil?

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 ...

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top