Come faccio a conservare la codifica in discussione quando si utilizza MessageFormat in Java

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

  •  27-10-2019
  •  | 
  •  

Domanda

Sto cercando di usare MessageFormat come segue,

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

Tuttavia, quando guardo la stringa URL finale, è, http: // host / download tag = sequenza schema

C'è qualche modo per mantenere il% 20 e non ha MessageFormat sostituirlo con uno spazio?

È stato utile?

Soluzione

Il codice che hai fornito non aggiunge lo spazio il codice di cui sopra restituisce "http: // host / download tag = sequenza% 20diagram"

Il tuo servlet di destinazione sta facendo la sostituzione. Quali che siano "/ download" viene mappato è l'analisi del parametro di tag e di eseguire la decodifica URL. È possibile ricostruire le possibili codifiche come segue. Sarà necessario per gestire l'UnsupportedEncodingException di seguito.

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

Purtroppo questa è solo una possibile codifica e per impostazione predefinita convertirà gli spazi per "+". Per ottenere il "% 20" di nuovo è necessario ricorrere a

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

Questo può funzionare per voi o no. In generale, è più opportuno normalizzare il valore decodificato anziché il valore codificato come ci sono molti possibili codifiche per valore decodificato.

Altri suggerimenti

In base a questo ho intenzione di indovinare mettendo virgolette singole intorno al valore avrebbe funzionato ...

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top