Как кодировать url в android?

Я использую сетку для отображения изображения с помощью анализа XML, у меня есть некоторые исключения, такие как

java.lang.IllegalArgumentException: недопустимый символ в пути в индексе 80: http://www.theblacksheeponline.com/party_img/thumbspps/912big_361999096_Flicking Off Douchebag.jpg

Как решить эту проблему? Я хочу показать все виды URL, кто-нибудь знает, пожалуйста, дайте пример кода для меня.

Спасибо всем

Ответы

Ответ 1

Кодирование URL-адресов выполняется аналогично на Android, как в Java SE;

try {
    String url = "http://www.example.com/?id=123&art=abc";
    String encodedurl = URLEncoder.encode(url,"UTF-8");
    Log.d("TEST", encodedurl);
} catch (UnsupportedEncodingException e) {
    e.printStackTrace();
} 

Ответ 2

Также вы можете использовать этот

private static final String ALLOWED_URI_CHARS = "@#&=*+-_.,:!?()/~'%";
String urlEncoded = Uri.encode(path, ALLOWED_URI_CHARS);

это самый простой метод

Ответ 3

Как говорит Бен в своем комментарии, вы не должны использовать URLEncoder.encode для полных URL-адресов, потому что вы измените семантику URL-адреса в следующем примере из W3C:

URI http://www.w3.org/albert/bertram/marie-claudeа также http://www.w3.org/albert/bertram%2Fmarie-claudeНЕ идентичны, как во втором если закодированная косая черта не имеет иерархическое значение.

Вместо этого вы должны закодировать составные части URL-адреса независимо друг от друга из RFC 3986 Раздел 2.4

При нормальных обстоятельствах, только время, когда октеты в URI процентное кодирование во время процесса создания URI из Компоненты. Это когда реализация определяет, какая из зарезервированные символы должны использоваться как субкомпонентов и которые могут быть безопасно использованы в качестве данных. однажды, URI всегда находится в процентная кодировка.

Итак, короче говоря, для вашего случая вы должны кодировать/удалять свое имя файла и затем собирать URL-адрес.

Ответ 4

Вы не кодируете весь URL-адрес, только его части, которые поступают из "ненадежных источников", например.

String query = URLEncoder.encode("Hare Krishna ", "utf-8");
String url = "http://stackoverflow.com/search?q=" + query;

Ответ 5

URLEncoder следует использовать только для кодирования запросов, вместо этого используйте java.net.URI:

URI uri = new URI(
    "http",
    "www.theblacksheeponline.com", 
    "/party_img/thumbspps/912big_361999096_Flicking Off Douchebag.jpg",
    null);
String request = uri.toASCIIString();

Ответ 6

вы можете использовать ниже метод

public String parseURL(String url, Map<String, String> params)
{
    Builder builder = Uri.parse(url).buildUpon();
    for (String key : params.keySet())
    {
        builder.appendQueryParameter(key, params.get(key));
    }
    return builder.build().toString();
}

Ответ 7

Я попытался с URLEncoder, который добавил (+) знак вместо (""), но это не работало, и получение 404 URL-адреса не найдена ошибка.

Тогда я погуглил, чтобы получить лучший ответ и нашел это и его работу потрясающей.

String urlStr = "http://www.example.com/test/file name.mp4";
URL url = new URL(urlStr);
URI uri = new URI(url.getProtocol(), url.getUserInfo(), url.getHost(), url.getPort(), url.getPath(), url.getQuery(), url.getRef());
url = uri.toURL();

Этот способ кодирования URL очень полезен, потому что с помощью URL мы можем разделить URL на разные части. Таким образом, нет необходимости выполнять какие-либо строковые операции.

Затем, во втором классе URI, этот подход использует преимущество класса URI, заключающееся в правильном экранировании компонентов, когда вы создаете URI через компоненты, а не из одной строки.