Вы должны на самом деле URI-encode «недопустимые» символы. Поскольку строка фактически содержит полный URL-адрес, трудно правильно кодировать URI-код. Вы не знаете, какие косынки /
должны быть приняты во внимание, а какие нет. Вы не можете заранее предсказать это на необработанном String
. Проблема действительно должна быть решена на более высоком уровне. Откуда у этого 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-формах). См. Также Java URL encoding of query string parameters.
Замена пробелов '% 20' на трюк. THX – Mannaz
@Mannaz - будьте осторожны, когда в названии песни появляется еще один «недействительный» символ. – Bozho
@BalusC я попробовал URLEncoder.encode («строка запроса», «UTF-8»); его возвращение с символом +, как этот «запрос + строка», где im ожидает «% 20». Поэтому я использовал string.replace с жестко закодированными значениями. Решила проблему. Спасибо за информацию. Есть ли другие пути для кодирования вместо ручной замены?? – praveenb