Come faccio a conservare la codifica in discussione quando si utilizza MessageFormat in Java
-
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?
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 ...