2017-06-16 3 views
0

Ich habe eine Pfaddatei:JS encodeURI Äquivalent von Java

file://///10.10.10.10/Yev Pri - Ru─▒n G├╢z├╝yle Ortado─Яu.pdf 

Dies wird wie folgt angezeigt:

file://///10.10.10.10/Ye%20Pri%20-%20Ru%E2%94%80%E2%96%92n%20G%E2%94%9C%E2%95%A2z%E2%94%9C%E2%95%9Dyle%20Ortado%E2%94%80%D0%AFu.pdf 

innerhalb <a/> Tag von HTML, wenn ich es untersuchen. Ich möchte dieselbe Zeichenkette bei Java erzeugen. Wenn ich es kodieren mit

URLEncoder.encode(path, StandardCharsets.UTF_8.displayName())

file%3A%2F%2F%2F%2F%2F10.10.10.10%2FYev+Pri+-+Ru%E2%94%80%E2%96%92n+G%E2%94%9C%E2%95%A2z%E2%94%9C%E2%95%9Dyle+Ortado%E2%94%80%D0%AFu.pdf 

Es scheint, dass Browser encodeURI() gilt. Wie kann ich die gleiche Zeichenfolge mit dem Browser erhalten?

+1

Mögliches Duplikat von [Java entspricht JavaScript encodeURIComponent, das identische Ausgabe erzeugt?] (Https://stackoverflow.com/questions/607176/java-equivalent-to-javascripts-encodeuricomponent-that-produces-identical-outpu) –

+0

@ KarlReid danke für den Link. Diese Antworten gelten jedoch nicht für meine Frage. Dies ist ein URL-Pfad und '/' sind nicht vom Browser verschlüsselt? – kamaci

+0

Fair genug, Entschuldigung. Es sieht so aus, als ob @ VGR's Antwort hier tut, was Sie brauchen. –

Antwort

2

URLEncoder dient zum Codieren von Formulardaten. Um einen entflohenen URL oder URI zu erstellen, verwenden Sie die java.net.URI class:

URI uri = new URI("file", "///10.10.10.10/Yev Pri - Ru─▒n G├╢z├╝yle Ortado─Яu.pdf", null); 
String escapedURI = uri.toASCIIString(); 

Hinweis: Sie nicht new URI("file://///10.10.10.10/Yev Pri - Ru─▒n G├╢z├╝yle Ortado─Яu.pdf") verwenden können, weil das Konstruktor nicht Prozent-escaping von Zeichen durchführen, die rechtlich nicht direkt in URIs erscheinen. Die Klassendokumentation gibt explizit an, dass der Konstruktor mit einem Argument erwartet, dass das Argument bereits ordnungsgemäß entwichen ist.

+0

Also kann ich das nicht als Antwort verwenden? – kamaci

+1

Sie können den URI-Konstruktor verwenden, der * drei * Argumente benötigt, wie mein Codeblock verwendet. Sie können den URI-Konstruktor nicht verwenden, der ein Argument benötigt. – VGR