Как кодировать 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 через компоненты, а не из одной строки.
Ответ 8
Недавно я написал быстрый кодировщик URI для этой цели. Он даже обрабатывает символы Unicode.
http://www.dmurph.com/2011/01/java-uri-encoder/