URL-Codierung in Android

Lesezeit: 5 Minuten

URL Codierung in Android
hpique

Wie kodiert man a URL bei Android?

Ich dachte es wäre so:

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.

URL Codierung in Android
Yanchenko

Sie codieren nicht die gesamte URL, sondern nur Teile davon, 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 verwenden Strings.urlEncode (Zeichenfolge str) von DroidParts das löst keine geprüften Ausnahmen aus.

Oder verwenden Sie so etwas wie

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.

Ex/

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

  • Unglücklicherweise Uri.encode("a=1&b=1") produziert a%3D1%26b%3D1 aber erwartet a=1&b=1

    – Loentar

    23. April 2015 um 12:06 Uhr


  • @loentar Das ist das erwartete Ergebnis. Wenn der Benutzer eintritt a=1&b=1 Als Abfrage möchten Sie genau das abfragen.

    – Anubian Noob

    21. August 2015 um 1:06 Uhr


  • Wie anders das mit URLEncoder.encode(StringHere,”UTF-8″)

    – festsitzender Überlauf

    18. Juli 2019 um 15:38 Uhr

  • @stuckedoverflow Zum einen löst Uri.encode(str) im Gegensatz zu URLEncoder.encode(str,”UTF-8″) keine geprüfte Ausnahme aus.

    – Deekshith

    14. Januar 2020 um 16:31 Uhr

Auch dies können Sie verwenden

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

es ist die einfachste Methode

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

URL Codierung in Android
Elango

Sie können die folgenden Methoden verwenden

public static String parseUrl(String surl) throws Exception
{
    URL u = new URL(surl);
    return new URI(u.getProtocol(), u.getAuthority(), u.getPath(), u.getQuery(), u.getRef()).toString();
}

oder

public String parseURL(String url, Map<String, String> params)
{
    Builder builder = Uri.parse(url).buildUpon();
    for (String key : params.keySet())
    {
        builder.appendQueryParameter(key, params.get(key));
    }
    return builder.build().toString();
}

der zweite ist besser als der erste.

1646684595 518 URL Codierung in Android
Ali Jafari

Finden Sie arabische Zeichen und ersetzen Sie sie durch die UTF-8-Codierung. etwas wie das:

for (int i = 0; i < urlAsString.length(); i++) {
    if (urlAsString.charAt(i) > 255) {
        urlAsString = urlAsString.substring(0, i) + URLEncoder.encode(urlAsString.charAt(i)+"", "UTF-8") + urlAsString.substring(i+1);
    }
}
encodedURL = urlAsString;

969150cookie-checkURL-Codierung in Android

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy