Простой ответ - использовать URLEncoder.encode(...)
, как указано @Recurse. Однако, если часть или весь URL-адрес уже был закодирован, это может привести к двойному кодированию. Например:
http://foo.com/pages/Hello%20There
или
http://foo.com/query?keyword=what%3f
Другая проблема, связанная с URLEncoder.encode(...)
, заключается в том, что он не понимает, что в некоторых контекстах следует экранировать некоторые символы, а в других - нет. Так, например, "?" в параметре запроса должен быть экранирован, но '?' который отмечает начало «части запроса», не должен быть экранирован.
Я думаю, что более безопасный способ добавить пропущенные escape-коды будет следующим:
String safeURI = new URI(url).toASCIIString();
Однако я не проверял это ...