385 Stimmen

URL-Kodierung in Android

Wie kodiert man eine URL in Android?

Ich dachte, es sei so:

final String encodedURL = URLEncoder.encode(urlAsString, "UTF-8");
URL url = new URL(encodedURL);

Wenn ich das oben beschriebene tue, wird die http:// en urlAsString wird ersetzt durch http%3A%2F%2F en encodedURL und dann bekomme ich eine java.net.MalformedURLException wenn ich die URL verwende.

700voto

yanchenko Punkte 55207

Sie kodieren nicht die gesamte URL, sondern nur die Teile, die aus "unzuverlässigen Quellen" stammen.

  • Javaです。

    String query = URLEncoder.encode("apples oranges", "utf-8");
    String url = "http://stackoverflow.com/search?q=" + query;
  • Kotlin:

    val query: String = URLEncoder.encode("apples oranges", "utf-8")
    val url = "http://stackoverflow.com/search?q=$query"

Alternativ können Sie auch Strings.urlEncode(String str) von DroidParts die keine geprüften Ausnahmen auslöst.

Oder verwenden Sie etwas wie

String uri = Uri.parse("http://...")
                .buildUpon()
                .appendQueryParameter("key", "val")
                .build().toString();

174voto

Craig B Punkte 4639

Ich möchte hier noch einen Vorschlag machen. Sie können dies tun, die vermeidet, um alle externen Bibliotheken zu erhalten.

Versuchen Sie dies:

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 speziellen URL die Leerzeichen kodieren muss, damit ich sie für eine Anfrage verwenden kann.

Dabei werden einige Funktionen genutzt, die Ihnen in Android-Klassen zur Verfügung stehen. Erstens kann die URL-Klasse eine URL in ihre Bestandteile zerlegen, so dass Sie keine Zeichenketten suchen/ersetzen müssen. Zweitens nutzt dieser Ansatz die URI-Klasse Funktion der ordnungsgemäß escaping Komponenten, wenn Sie eine URI über Komponenten statt aus einer einzigen Zeichenfolge zu konstruieren.

Das Schöne an diesem Ansatz ist, dass Sie eine beliebige gültige URL-Zeichenkette verwenden können, ohne dass Sie selbst besondere Kenntnisse darüber haben müssen.

86voto

tanutapi Punkte 1051

Für Android würde ich verwenden String Android.net.Uri.encode(String s)

Kodiert Zeichen in der angegebenen Zeichenkette als '%'-escapte Oktette unter Verwendung des UTF-8-Schemas. Lässt Buchstaben ("A-Z", "a-z"), Zahlen ("0-9") und nicht reservierte Zeichen ("_-!.~'()*") unberührt. Kodiert alle anderen Zeichen.

Ex/

String urlEncoded = "http://stackoverflow.com/search?q=" + Uri.encode(query);

52voto

Jedo Punkte 801

Sie können auch Folgendes verwenden

private static final String ALLOWED_URI_CHARS = "@#&=*+-_.,:!?()/~'%";
String urlEncoded = Uri.encode(path, ALLOWED_URI_CHARS);

es ist die einfachste Methode

4voto

Thiago Punkte 11191
try {
                    query = URLEncoder.encode(query, "utf-8");
                } catch (UnsupportedEncodingException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }

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