как URL кодировать в Android? - PullRequest
       4

как URL кодировать в Android?

17 голосов
/ 17 сентября 2010

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

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

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

Спасибо всем

Ответы [ 8 ]

28 голосов
/ 17 сентября 2010

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();
} 
13 голосов
/ 24 января 2014

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

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

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

6 голосов
/ 09 марта 2011

Как говорит Бен в своем комментарии, вы не должны использовать 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 голосов
/ 25 декабря 2015

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

String query = URLEncoder.encode("Hare Krishna ", "utf-8");
String url = "http://stackoverflow.com/search?q=" + query;
1 голос
/ 05 февраля 2019

Я пытался с 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 через компоненты, а не из одной строки.

1 голос
/ 18 июня 2016

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

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();
}
1 голос
/ 07 апреля 2012

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();
0 голосов
/ 04 августа 2011

Я недавно написал быстрый кодировщик URI для этой цели.Он даже обрабатывает символы Unicode.http://www.dmurph.com/2011/01/java-uri-encoder/

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...