Ihre Komponenten, die möglicherweise Zeichen enthalten, die maskiert werden müssen, sollten bereits mit URLEncoder maskiert worden sein, bevor sie zu einem URI verkettet werden.
Wenn Sie einen URI mit Out-of-Band-Zeichen haben (wie Leerzeichen, "<> [] {} \ | ^` und Nicht-ASCII-Bytes), handelt es sich nicht wirklich um einen URI. Sie können es versuchen repariere sie, indem du sie manuell percentest, aber dies ist eine letzte Operation und keine Standardform der Kodierung Dies ist normalerweise notwendig, wenn du potentiell missgebildete URIs von Benutzereingaben akzeptierst, aber es ist kein standardisiertes Betrieb und ich kenne keine integrierte Java-Bibliothek-Funktion, die es für Sie tun wird, müssen Sie möglicherweise selbst mit einer RegExp hacken.
In die andere Richtung, müssen Sie Ihre URI auseinander in seine Bestandteile (jeder separate Pfadteil, Name und Wert des Abfrageparameters usw.), bevor Sie jedes Teil (mit einem URLDecoder) entschlüsseln können Es gibt keinen vernünftigen Weg, einen ganzen URI auf einmal zu dekodieren; Sie könnten versuchen, '% -escapes' zu dekodieren, die nicht zu Delimitern dekodieren '(wie /? = &;%), aber Sie hätten eine seltsame inkonsistente Zeichenkette, die keinem URI-Verarbeitungsstandard entspricht.
URLEncoder/URLDecoder eignen sich für die Behandlung von URI-Abfragekomponenten, sowohl Namen als auch Werte. Allerdings sind sie nicht durchaus Recht für die Handhabung von URI-Pfad Teilkomponenten. Der Unterschied ist, dass das Zeichen '+' kein Leerzeichen in einem Pfadteil bedeutet. Sie können dies mit einem einfachen String ersetzen ersetzen: Ersetzen Sie nach URLEncoding '+' durch '% 20'; Ersetzen Sie vor URLDecoding '+' durch '% 2B'. Sie können den Unterschied ignorieren, wenn Sie nicht beabsichtigen, Segmente mit Leerzeichen oder Pluszeichen in Ihren Pfad aufzunehmen.
Ist das nicht application/x-www-form-urlencoded das Gleiche? –
Nein, ist es nicht. RFC2396-Codierung ist nicht identisch mit Codierung für HTML-Formulardaten. – Gili
Siehe http://stackoverflow.com/questions/444112/how-do-i-encode-uri-parameter-values gibt es einige Antworten. –