391 Stimmen

HTTP-URL-Adresskodierung in Java

Meine Java-Standalone-Anwendung erhält vom Benutzer eine URL (die auf eine Datei verweist), und ich muss sie anklicken und herunterladen. Das Problem, das ich konfrontiert bin, ist, dass ich nicht in der Lage bin, die HTTP-URL-Adresse richtig zu kodieren...

Ejemplo:

URL:  http://search.barnesandnoble.com/booksearch/first book.pdf

java.net.URLEncoder.encode(url.toString(), "ISO-8859-1");

gibt mich zurück:

http%3A%2F%2Fsearch.barnesandnoble.com%2Fbooksearch%2Ffirst+book.pdf

Aber was ich will, ist

http://search.barnesandnoble.com/booksearch/first%20book.pdf

(Leerzeichen ersetzt durch %20)

Ich denke URLEncoder ist nicht dafür ausgelegt, HTTP-URLs zu kodieren... In der JavaDoc heißt es "Utility class for HTML form encoding"... Gibt es eine andere Möglichkeit, dies zu tun?

-1voto

smola Punkte 843

Ich entwickle eine Bibliothek, die diesem Zweck dient: galimatias . Es analysiert die URL auf die gleiche Weise wie Webbrowser. Das heißt, wenn eine URL in einem Browser funktioniert, wird sie auch korrekt von galimatias .

In diesem Fall:

// Parse
io.mola.galimatias.URL.parse(
    "http://search.barnesandnoble.com/booksearch/first book.pdf"
).toString()

wird Ihnen geben: http://search.barnesandnoble.com/booksearch/first%20book.pdf . Natürlich ist dies der einfachste Fall, aber es funktioniert mit allem, weit darüber hinaus java.net.URI .

Sie können es unter folgender Adresse nachlesen: https://github.com/smola/galimatias

-2voto

Ich benutze dies

org.apache.commons.text.StringEscapeUtils.escapeHtml4("my text % & < >");

diese Abhängigkeit hinzufügen

 <dependency>
        <groupId>org.apache.commons</groupId>
        <artifactId>commons-text</artifactId>
        <version>1.8</version>
    </dependency>

-3voto

Salim Hamidi Punkte 19655

Sie können eine Funktion wie diese verwenden. Vervollständigen und ändern Sie sie nach Ihrem Bedarf:

/**
     * Encode URL (except :, /, ?, &, =, ... characters)
     * @param url to encode
     * @param encodingCharset url encoding charset
     * @return encoded URL
     * @throws UnsupportedEncodingException
     */
    public static String encodeUrl (String url, String encodingCharset) throws UnsupportedEncodingException{
            return new URLCodec().encode(url, encodingCharset).replace("%3A", ":").replace("%2F", "/").replace("%3F", "?").replace("%3D", "=").replace("%26", "&");
    }

Beispiel für die Verwendung :

String urlToEncode = ""http://www.growup.com/folder/intérieur-à_vendre?o=4";
Utils.encodeUrl (urlToEncode , "UTF-8")

Das Ergebnis ist: http://www.growup.com/folder/int%C3%A9rieur-%C3%A0_vendre?o=4

-7voto

MichaelICE Punkte 9777

Wie wäre es damit:

public String UrlEncode(String in_) {

String retVal = "";

try {
    retVal = URLEncoder.encode(in_, "UTF8");
} catch (UnsupportedEncodingException ex) {
    Log.get().exception(Log.Level.Error, "urlEncode ", ex);
}

return retVal;

}

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X