У меня проблемы с созданием рабочего URL, потому что он должен содержать некоторые специальные символы.
String address = "...";
URL url = new URL(address);
URI uri = new URI(url.getProtocol(), url.getUserInfo(), url.getHost(), url.getPort(), url.getPath(), url.getQuery(), url.getRef());
url = uri.toURL();
InputStream input = url.openStream();
....
Проблема в том, что мой адрес должен содержать & в качестве одного из символов в строке,выражается в% 26.Когда я создаю свой адрес как:
String address = "http://foo.com/?animal=monkey&banana=fruit%20%26%20delicious";
..., который изменяется в
"http://foo.com/?animal=monkey&banana=fruit%20%2526%20delicious"
во время процесса URL-to-URI-and-back.
Как лучше всего это исправить?Использую ли я лучшие практики для преобразования URL / URI?Если это так, есть ли способ избежать «%» перед 26, чтобы он оставался% 26 в конце?
MCVE:
import java.util.*;
import java.io.*;
import java.net.*;
public class Test {
public static void main(String[] args) {
try {
String address = "http://foo.com/?animal=monkey&banana=fruit%20%26%20delicious";
URL url = new URL(address);
URI uri = new URI(url.getProtocol(), url.getUserInfo(), url.getHost(), url.getPort(), url.getPath(), url.getQuery(), url.getRef());
url = uri.toURL();
System.out.println("url: " + url);
} catch (Exception e) {
System.out.println("Bad!");
}
}
}
Терминал ввода-вывода:
$ javac Test.java
$ java Test
url: http://foo.com/?animal=monkey&banana=fruit%2520%2526%2520delicious
Другими словами, как мне заставить его выводить этот URL:
url: http://foo.com/?animal=monkey&banana=fruit%20%26%20delicious