Android: how to parse URL-Zeichenfolge mit Leerzeichen URI-Objekt?
Ich habe einen string, der eine URL mit Leerzeichen und wollen es zu konvertieren, um ein URI-Objekt. Wenn ich einfach nur versuchen, um es zu schaffen über
String myString = "http://myhost.com/media/File Name that has spaces inside.mp3";
URI myUri = new URI(myString);
es gibt mir
java.net.URISyntaxException: Illegal character in path at index X
wobei der index X
ist die position des ersten Leerzeichen in die URL-Zeichenfolge.
Wie kann ich analysieren myString
in eine URI
Objekt?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Sollten Sie in der Tat URI-encode die "ungültigen" Zeichen. Da die Schnur tatsächlich enthält die vollständige URL, es ist schwer, richtig URI-encode-it. Sie wissen nicht, welche Schrägstriche
/
berücksichtigt werden sollten und welche nicht. Sie können nicht Vorhersagen, die auf einem raw -String
vorher. Das problem muss wirklich gelöst werden, auf einer höheren Ebene. Wo steht, dassString
kommen? Ist es hardcoded? Dann einfach ändern Sie Sie entsprechend. Kommt es in as user input? Validieren und Fehler anzeigen, damit der Benutzer selbst lösen.In irgendeiner Weise, wenn Sie sicherstellen können, dass Sie es sind nur das Leerzeichen in URLs, wodurch es ungültig ist, dann kannst du auch nur einen string-by-string ersetzen mit
%20
:Oder wenn Sie sicherstellen können, dass es nur der Teil nach dem letzten Schrägstrich werden müssen URI-codiert, dann kann man auch einfach so tun, mit Hilfe von
android.net.Uri
utility-Klasse:Tun, beachten Sie, dass
URLEncoder
ist insuitable für die Aufgabe, da es entworfen ist, zum codieren von Abfragezeichenfolgen-parameter-Namen/Werte proapplication/x-www-form-urlencoded
Regeln (wie in HTML-Formularen). Siehe auch Java URL-Codierung von query-string-Parameter.%20
dit der trick. THXDiese wird URL-encode die Zeichenfolge.
finalPartOfString
ist der Teil nach dem letzten Schrägstrich - in Ihrem Fall den Namen des Liedes, wie es scheint.URISyntaxException
aber jetzt bekomme ich einen 404 vom server. Die url, die ich bekomme, isthttp://myhost.com/media/mp3s/9/Agenda+of+swine+-+13.+Persecution+Ascension_+leave+nothing+standing.mp3
. Ich URI verwenden, die in einemorg.apache.http.client.methods.HttpGet.HttpGet
Anfrage. Irgendwelche Ideen?myString
) in einem normalen Browser nicht zu einem 404-Fehler.Behandeln Leerzeichen, @ und andere unsichere Zeichen an beliebigen Orten in der url-Pfad Verwenden Uri.Generator in Kombination mit einer lokalen Instanz von URL, wie ich Sie beschrieben habe,hier:
Schrieb ich diese Funktion: