Я имею строку, представляющую 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
объект?
Фактически вы должны кодировать 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 параметров строки запроса .
java.net.URLEncoder.encode(finalPartOfString, "utf-8");
Это приведет к URL-кодированию строки.
finalPartOfString
- это часть после последней косой черты - в вашем случае название песни, как кажется.