как вставить% 20 ​​вместо пробела в андроиде

У меня есть XML-файл URL, в котором есть пробелы, я хочу заменить пробелы на% 20 .. как это сделать ????

SAXParserFactory spf = SAXParserFactory.newInstance();
SAXParser sp = spf.newSAXParser();
XMLReader xr = sp.getXMLReader();

/** Send URL to parse XML Tags */
URL sourceUrl = new URL(
                "http://www.arteonline.mobi/iphone/output.php?gallery=MALBA%20-%20MUSEO%20DE%20ARTE%20LATINOAMERICANO%20DE%20BUENOS%20AIRES");

XMLHandlerartistspace myXMLHandler = new XMLHandlerartistspace();
xr.setContentHandler(myXMLHandler);
xr.parse(new InputSource(sourceUrl.openStream()));

person SRam    schedule 18.05.2011    source источник
comment
URLEncoder.encode(value, "UTF-8") - это решение.   -  person Paresh Mayani    schedule 19.10.2012


Ответы (6)


Попробуй это:

String temp = http://www.arteonline.mobi/iphone/output.php?gallery=MALBA%20-%20MUSEO%20DE%20ARTE%20LATINOAMERICANO%20DE%20BUENOS%20AIRES

temp = temp.replaceAll(" ", "%20");
URL sourceUrl = new URL(temp);
person Sumant    schedule 18.05.2011
comment
Я считаю, что это неправильный подход. URL-адрес (за исключением части хоста) должен быть закодирован в URL-адресе (с использованием URLEncoder.encode). После этого вы можете заменить символы + на %20. Если вы не используете URLEncoder.encode, существует риск, что другие специальные символы в URL-адресе могут вызвать проблемы. (Обратите внимание, что + для представления символа пробела вполне допустимо в URL-адресе; вам может даже не понадобиться %20.) - person Ted Hopp; 20.08.2013
comment
+1 Спасибо за решение. Оно работало завораживающе! Ты спас мне день, чувак;) Еще раз большое спасибо;) - person Simon Dorociak; 02.09.2014
comment
Обратите внимание, что приведенное ниже решение URI.Builder является правильным. Это выполняет свою работу .. но в профессиональной среде вам нужно решение от SudoCode - person StarWind0; 01.03.2016

При создании URL-адреса следует использовать URLEncoder. для кодирования параметров.

StringBuilder query = new StringBuilder();
query.append("gallery=");
query.append(URLEncoder.encode(value, "UTF-8"));

Если у вас уже есть весь URL-адрес в строке или java.net.URL, вы можете захватить часть запроса и перестроить, пока URLEncoding каждое значение параметра.

person sudocode    schedule 18.05.2011
comment
Это правильный путь. Если вы сами используете регулярное выражение или replaceAll, значит, вы делаете это неправильно. - person Robert Massaioli; 18.05.2011
comment
Но убедитесь, что URL-адрес не кодирует хостовую часть URL-адреса и символы '/' внутри URL-адреса. попробуйте подстроку полного URL-адреса или сделайте это в процессе сборки, как предлагается судокодом с помощью построителя строк. - person DArkO; 18.05.2011
comment
Если по какой-то причине OP не может жить с +, представляющим пробелы, и действительно нуждается в %20, достаточно просто вызвать replace("+", "%20") после вызова URLEncoder.encode. - person Ted Hopp; 20.08.2013
comment
почему query.append("gallery=");? - person Muhammed Refaat; 05.12.2018
comment
@MuhammedRefaat имя параметра и знак равенства не требуют кодирования URL. Значение параметра должно быть. - person sudocode; 10.12.2018

Только одно дополнение к ответу судокода:

Используйте android.net.Uri.encode вместо URLEncoder.encode, чтобы избежать проблемы "преобразования пробелов в +". Тогда вы избавитесь от String.replaceAll(), и он станет более элегантным :)

StringBuilder query = new StringBuilder();
query.append("gallery=");
query.append(android.net.Uri.encode(value));
person voghDev    schedule 18.10.2013
comment
Правильное использование - android.net.Uri.encode (value,: /), где второй аргумент - это список символов, которые не должны кодироваться - person Softec; 28.02.2015
comment
Это должен быть самый проголосовавший и выбранный вариант. +1 - person Ankit Aggarwal; 06.12.2016
comment
@Softec Я удалил необязательный второй аргумент из вашего комментария. - person Ellen Spertus; 11.02.2020

Я думаю, вы хотите заменить все пробелы, а не только белые.

самый простой способ - использовать

"url_with_spaces".replaceAll(" ", "%20);

Однако вы должны учитывать и другие символы в URL-адресе. См. Рекомендуемый метод экранирования HTML в Java

person bart    schedule 18.05.2011
comment
что, если вы хотите закодировать синие или красные пробелы в URL-адресе? - person Christopher Perry; 10.08.2013

Для тех, кому нужны символы пробела для кодирования как значение %20 вместо значения +, используйте:

String encodedString = URLEncoder.encode(originalString,"UTF-8").replaceAll("\\+", "%20")
person TheIT    schedule 01.05.2019

Попробуйте использовать _ 1_ из API org.apache.commons.httpclient.util.URIUtil.

Это должно помочь вам.

person Paul John    schedule 22.01.2014