Android : Howto Parse URL String mit Leerzeichen auf URI-Objekt ?

? Mannaz @ | Original: StackOverFlow
---

Ich habe eine Zeichenfolge, die eine URL enthalten, Räume und wollen es zu einem URI-Objekt zu konvertieren. Wenn einfach versuchen, zu tun

String myString = "http://myhost.com/media/mp3s/9/Agenda of swine - 13. Persecution Ascension_ leave nothing standing.mp3";
URI myUri = new URI(myString);

it gives me

java.net.URISyntaxException: Illegal character in path at index X

wobei der Index X ist die Position des ersten Raums in der URL-Zeichenfolge .

Wie kann ich analysieren myString in eine URI Objekt ?

---

Top 5 Antwort

1Bozho @
java.net.URLEncoder.encode(finalPartOfString, "utf-8");

Dies wird die Zeichenfolge http://www.w3schools.com/TAGS/ref_urlencode.asp .

finalPartOfString Ist der Teil nach dem letzten Schrägstrich - in Ihrem Fall, wird der Name des Songs, wie es scheint.

2BalusC @

Sie sollten in der Tat http://java.sun.com/javase/6/docs/api/java/net/URLEncoder.html die http://en.wikipedia.org/wiki/Percent-encoding . Da die Zeichenfolge enthält tatsächlich die vollständige URL, ist es schwer, richtig zu URL - kodieren sie . Sie wissen nicht, welche Schrägstriche URLEncode sollte berücksichtigt werden, und welche nicht berücksichtigt werden. Sie können nicht vorhersagen, dass auf einem rohen / voraus . Das Problem wirklich braucht, um auf einer höheren Ebene gelöst werden. Wo steht, dass String her? Ist es hartkodierte ? Dann ändern Sie es einfach selbst entsprechend. Ist es herein als Benutzereingaben ? Validieren und zeigen Fehler, damit der Benutzer selbst lösen.

Zu jeder Weise, wenn Sie sicherstellen können, dass es nur die Räume, in URLs, die es ungültig ist, dann können Sie auch nur tun, ein char -by- char ersetzen mit String :

+

oder eine Zeichenfolge -für- Zeichenfolge zu ersetzen mit URI uri = new URI(string.replace(' ', '+')); :

%20

Oder wenn Sie sicherstellen können, dass es nur der Teil nach dem letzten Schrägstrich, der muss codiert werden, dann kannst du auch einfach tun :

URI uri = new URI(string.replace(" ", "%20"));
3Phileo99 @

Um Räume, @ und andere unsichere Zeichen in beliebigen Orten in der URL-Weg umgehen, verwenden Uri.Builder in Kombination mit einer lokalen Instanz von URL, wie ich es beschrieben habe http://stackoverflow.com/a/22059606/923920 :

int pos = string.lastIndexOf('/') + 1;
URI uri = new URI(string.substring(0, pos) + URLEncoder.encode(string.substring(pos), "utf-8"));
4siddmuk2005 @
private Uri.Builder builder;
public Uri getUriFromUrl(String thisUrl) {
    URL url = new URL(thisUrl);
    builder =  new Uri.Builder()
                            .scheme(url.getProtocol())
                            .authority(url.getAuthority())
                            .appendPath(url.getPath());
    return builder.build();
}