Wie behalte ich die Codierung in Argument, wenn ich MessageFormat in Java verwende?

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

  •  27-10-2019
  •  | 
  •  

Frage

Ich versuche zu benutzen MessageFormat folgendermaßen,

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

Wenn ich mir jedoch die endgültige URL -Zeichenfolge ansehe, ist es.http: // host/downloads? Tags = Sequenz Diagramm

Gibt es irgendwie, um den %20 beizubehalten und MessageFormat nicht durch einen Raum zu ersetzen?

War es hilfreich?

Lösung

Der Code, den Sie bereitgestellt haben, fügt nicht den Speicherplatz hinzu. Der obige Code gibt "http: // host/downloads? Tags = sequence%20diagram" zurück.

Ihr Ziel -Servlet macht den Substitution. Unabhängig von "/Downloads" ist es zugeordnet, den Tags -Parameter zu analysieren und URL -Dekodierung durchzuführen. Sie können mögliche Kodierungen wie folgt rekonstruieren. Sie müssen die nicht unterstützte AnscodingException im Folgenden verarbeiten.

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

Leider ist dies nur eine mögliche Codierung, und standardmäßig konvertiert die Räume in "+". Um die "%20" zurückzubekommen, müssen Sie auf zurückgreifen

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

Dies kann für Sie funktionieren oder nicht. Im Allgemeinen ist es ratsamer, den dekodierten Wert anstelle des codierten Werts zu normalisieren, da es viele mögliche Codierungen pro dekodiertem Wert gibt.

Andere Tipps

Bezogen auf Dies Ich werde vermuten, dass einzelne Zitate rund um den Wert funktionieren würden ...

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top