Java und RFC 3986 URI -Codierung
Frage
Gibt es eine Klasse, um ein Generikum zu codieren? String
Nach der RFC 3986 -Spezifikation?
Das ist: "hello world"
=> "hello%20world"
Nicht (RFC 1738): "hello+world"
Vielen Dank
Lösung 2
Damit gelöst:
Methode encodeUri
Andere Tipps
Wenn es sich um eine URL handelt, verwenden Sie URI
URI uri = new URI("http", "//hello world", null);
String urlString = uri.toASCIIString();
System.out.println(urlString);
Quelle: Twitter RFC3986 Konforme Codierungsfunktionen.
Diese Methode übernimmt String und konvertiert sie in RFC3986 spezifischer codierter String.
/** The encoding used to represent characters as bytes. */
public static final String ENCODING = "UTF-8";
public static String percentEncode(String s) {
if (s == null) {
return "";
}
try {
return URLEncoder.encode(s, ENCODING)
// OAuth encodes some characters differently:
.replace("+", "%20").replace("*", "%2A")
.replace("%7E", "~");
// This could be done faster with more hand-crafted code.
} catch (UnsupportedEncodingException wow) {
throw new RuntimeException(wow.getMessage(), wow);
}
}
Ich weiß nicht, ob es einen gibt. Es gibt eine Klasse, die eine Codierung liefert, aber "in"+"ändert. Sie können jedoch die Ersatz -Methode in der String -Klasse verwenden, um das "+" in das umzuwandeln, was Sie wollen.
Str.Repaceall ("+", "%20")
Bei Spring -Webanwendungen konnte ich dies verwenden:
UriComponentsBuilder.newInstance()
.queryParam("KEY1", "Wally's crazy empôrium=")
.queryParam("KEY2", "Horibble % sign in value")
.build().encode("UTF-8") // or .encode() defaults to UTF-8
Gibt die Zeichenfolge zurück
?KEY1=Wally's%20crazy%20emp%C3%B4rium%3D&KEY2=Horibble%20%25%20sign%20in%20value
Eine Kreuzung über eine meiner bevorzugten Websites zeigt das gleiche Ergebnis "Prozent Codierung für URIs". Sieht gut für mich aus. http://rishida.net/tools/conversion/