Android: как проанализировать Строку URL с пробелами к объекту URI?

Я имею строку, представляющую URL, содержащий пробелы, и хочу преобразовать его в объект URI. Если я просто пытаюсь создать его через

String myString = "http://myhost.com/media/File Name that has spaces inside.mp3";
URI myUri = new URI(myString);

это дает мне

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

где индекс X положение первого пространства в строке URL.

Как я могу проанализировать myString в a URI объект?

61
задан whlk 5 March 2019 в 09:46
поделиться

2 ответа

Фактически вы должны кодировать URI «недопустимые» символы. Поскольку строка фактически содержит полный URL-адрес, ее сложно правильно закодировать URI. Вы не знаете, какие косые черты / следует учитывать, а какие нет. Вы не можете заранее предсказать это для необработанной String . Проблема действительно требует решения на более высоком уровне. Откуда взялась эта Строка ? Это жестко запрограммировано? Тогда просто измените его самостоятельно. Это вводится пользователем? Подтвердите его и покажите ошибку, пусть пользователь решит сам.

В любом случае, если вы можете убедиться, что это только пробелы в URL, которые делают его недействительным, то вы также можете просто заменить строку за строкой на % 20 :

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

Или, если вы можете убедиться, что это только часть после последней косой черты, которая должна быть закодирована URI, то вы также можете просто сделать это с помощью android.net .Uri служебный класс:

int pos = string.lastIndexOf('/') + 1;
URI uri = new URI(string.substring(0, pos) + Uri.encode(string.substring(pos)));

Обратите внимание, что URLEncoder не подходит для этой задачи, поскольку он предназначен для кодирования имен / значений параметров строки запроса согласно application / x-www-form- urlencoded правила (используемые в HTML-формах). См. Также Кодирование URL-адресов Java параметров строки запроса .

121
ответ дан 24 November 2019 в 17:09
поделиться
java.net.URLEncoder.encode(finalPartOfString, "utf-8");

Это приведет к URL-кодированию строки.

finalPartOfString - это часть после последней косой черты - в вашем случае название песни, как кажется.

19
ответ дан 24 November 2019 в 17:09
поделиться
Другие вопросы по тегам:

Похожие вопросы: