Wie behalte ich die Codierung in Argument, wenn ich MessageFormat in Java verwende?
-
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?
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 ...