final String encodedURL = URLEncoder.encode(urlAsString, "UTF-8");
URL url = new URL(encodedURL);
Wenn ich das oben mache, wird die http:// in urlAsString wird ersetzt durch http%3A%2F%2F in encodedURL und dann bekomme ich a java.net.MalformedURLException wenn ich die URL verwende.
Yanchenko
Sie codieren nicht die gesamte URL, sondern nur Teile davon, die aus „unzuverlässigen Quellen“ stammen.
String uri = Uri.parse("http://...")
.buildUpon()
.appendQueryParameter("key", "val")
.build().toString();
Was ist, wenn die gesamte URL unzuverlässig ist? Soll ich alles außer dem Protokoll verschlüsseln? Ich habe irgendwie eine bequeme Methode erwartet, um dies zu tun.
– hpique
20. Juli 2010 um 0:28 Uhr
Dann ist es nur eine kaputte URL. Die Idee ist, zu verhindern, dass der Abfrageteil die URL beschädigt.
– Jantschenko
20. Juli 2010 um 0:37 Uhr
@hgpc – werfen Sie einen Blick auf Abschnitt 3 von RFC3986 (tools.ietf.org/html/rfc3986#section-3). Es sagt Ihnen, wie Sie die verschiedenen Teile einer URI codieren. Leider hat jeder Teil des URI (Host, Pfad, Abfrage usw.) leicht unterschiedliche Codierungsregeln.
– D. Shawley
20. Juli 2010 um 1:49 Uhr
Das ist insofern in Ordnung, als Sie es nur mit einem bestimmten Teil einer URL zu tun haben und wissen, wie man die URL konstruiert oder rekonstruiert. Einen allgemeineren Ansatz, der jede URL-Zeichenfolge verarbeiten kann, finden Sie in meiner Antwort unten.
– Craig B
22. Januar 2012 um 17:08 Uhr
Warum erhalte ich eine Abwertungswarnung, wenn ich dies verwende? Benutzt Uri.encode(query); stattdessen.
– prasanthv
6. April 2014 um 16:13 Uhr
Ich werde hier einen Vorschlag hinzufügen. Sie können dies tun, wodurch vermieden wird, dass Sie externe Bibliotheken abrufen müssen.
Probieren Sie es aus:
String urlStr = "http://abc.dev.domain.com/0007AC/ads/800x480 15sec h.264.mp4";
URL url = new URL(urlStr);
URI uri = new URI(url.getProtocol(), url.getUserInfo(), url.getHost(), url.getPort(), url.getPath(), url.getQuery(), url.getRef());
url = uri.toURL();
Sie können sehen, dass ich in dieser bestimmten URL diese Leerzeichen codiert haben muss, damit ich sie für eine Anfrage verwenden kann.
Dies nutzt einige Funktionen, die Ihnen in Android-Kursen zur Verfügung stehen. Erstens kann die URL-Klasse eine URL in ihre richtigen Komponenten zerlegen, sodass Sie keine String-Such-/Ersetzungsarbeiten durchführen müssen. Zweitens nutzt dieser Ansatz die URI-Klassenfunktion zum korrekten Escapezeichen von Komponenten, wenn Sie einen URI über Komponenten statt aus einer einzelnen Zeichenfolge erstellen.
Das Schöne an diesem Ansatz ist, dass Sie jede gültige URL-Zeichenfolge nehmen und sie zum Laufen bringen können, ohne selbst spezielle Kenntnisse darüber zu benötigen.
Dies sollte die richtige Antwort sein. Dies ist der formale und klare Weg, dies zu tun
– Asanka Senavirathna
29. August 2012 um 12:27 Uhr
Es kann auch eine gute Idee sein, urlStr vor dem Senden an den URL-Konstruktor zu urldecodieren. URLDecoder.decode(urlStr)
– Jakob Erikson
30. September 2012 um 11:31 Uhr
Genaue Antwort. Vielen Dank. Sie haben meinen Tag gerettet
– Sakthimuthiah
16. Mai 2013 um 8:21 Uhr
@berserk Wenn es bereits codiert ist, codieren Sie es nicht. Sie sollten nicht in einen Zustand geraten, in dem es teilweise codiert ist oder Sie nicht sicher sind, ob es codiert ist oder nicht.
– Benutzer207421
17. Januar 2014 um 7:00 Uhr
Diese Methode codiert keine Zeichen wie ð in %C4%9F. Akzeptiert wird verschlüsselt!
– Alexander Prokofjew
30. Mai 2015 um 15:11 Uhr
Für Android würde ich String android.net.Uri.encode(String s) verwenden
Codiert Zeichen in der angegebenen Zeichenfolge unter Verwendung des UTF-8-Schemas als Oktette mit „%“-Escapezeichen. Lässt Buchstaben (“AZ”, “az”), Zahlen (“0-9”) und nicht reservierte Zeichen (“_-!.~'()*”) intakt. Kodiert alle anderen Zeichen.