Java - Преобразовать строку в допустимый объект URI
Я пытаюсь получить java.net.URI объект из String. В строке есть несколько символов, которые нужно будет заменить их процентными управляющими последовательностями. Но когда я использую URLEncoder для кодирования строки в кодировке UTF-8, даже / заменяются их escape-последовательностями.
Как я могу получить допустимый закодированный URL-адрес из объекта String?
Я собираюсь добавить здесь одно предложение, предназначенное для пользователей Android. Вы можете сделать это, чтобы избежать необходимости получать какие-либо внешние библиотеки. Кроме того, все решения для поиска / замены символов, предложенные в некоторых ответах выше, опасны, и их следует избегать.
Вы можете видеть, что в этом конкретном URL-адресе мне нужно закодировать эти пробелы, чтобы я мог использовать его для запроса.
Это использует преимущества пары функций, доступных вам в классах Android. Во-первых, класс URL может разбивать URL на соответствующие компоненты, поэтому вам не нужно выполнять какую-либо работу по поиску / замене строки. Во-вторых, этот подход использует преимущество функции класса URI для правильного экранирования компонентов, когда вы создаете URI через компоненты, а не из одной строки.
Прелесть этого подхода в том, что вы можете взять любую допустимую строку URL и заставить ее работать, не требуя каких-либо специальных знаний о ней самостоятельно.
Ответ 4
Даже если это старый пост с уже принятым ответом, я публикую свой альтернативный ответ, потому что он хорошо работает для текущей проблемы, и, кажется, никто не упоминал этот метод.
С помощью библиотеки java.net.URI:
URIuri= URI.create(URLString);
И если вы хотите соответствующую ей строку в формате URL:
StringvalidURLString= uri.toASCIIString();
В отличие от многих других методов (например, java.net.URLEncoder) этот заменяет только небезопасные символы ASCII (например, ç, é ...).
В приведенном выше примере, если URLString это следующее String:
"http://www.domain.com/façon+word"
в результате validURLString будет:
"http://www.domain.com/fa%C3%A7on+word"
который представляет собой хорошо отформатированный URL.