Como codificar um URL para ser "navegável"?

Quero saber se existe alguma maneira de analisar um URL como este:

https://www.mysite.com/lot/of/unpleasant/folders/and/my/url with spaces &"others".xls

para dentro

https://www.mysite.com/lot/of/unpleasant/folders/and/my/url%20with%20spaces%20&%22others%22.xls

Semelhante à reescrita de URL que o Firefox faz ao colar o URL anterior, enviando-o para o servidor (sem resposta, a menos que você tenha um site como este) e copiando o URL da barra de navegação e colando-o em outro lugar.

UsandoURLEncoder#encode dá-me esta saída (indesejada):

https%3A%2F%2Fwww.mysite.com%2Flot%2Fof%2Funpleasant%2Ffolders%2Fand%2Fmy%2Furl+with+spaces+%26%22others%22.xls

Infelizmente, recebo uma String, como mostrado no início da pergunta, usandoURLEncoder#encode diretamente não funciona.

Eu tentei ingenuamente isso:

String evilUrl = "https://www.mysite.com/lot/of/unpleasant/folders/and/my/url with spaces &\"others\".xls";
URI uri = null;
String[] urlParts = evilUrl.split("://");
String scheme = urlParts[0];
urlParts = urlParts[1].split("/");
String host = urlParts[0];
StringBuilder sb = new StringBuilder('/');
for (int i = 1; i < urlParts.length; i++) {
    sb.append('/');
    sb.append(urlParts[i]);
}
uri = new URI(scheme, host, sb.toString(), null);
System.out.println(uri.toASCIIString());

E fornece essa (melhor) saída:

https://www.mysite.com/lot/of/unpleasant/folders/and/my/url%20with%20spaces%20&%22others%22.xls

Mas não tenho certeza se existe uma solução pronta para esse problema e estou quebrando a cabeça por nada ou se posso confiar que esse trecho de código possa resolver quase com êxito o meu problema.

A propósito, eu já visitei alguns recursos sobre este tópico:

Codificação de URL Java dos parâmetros da string de consultaCodificação de endereço de URL HTTP em JavaURLEncoder não consegue converter caracteres de espaço

questionAnswers(1)

yourAnswerToTheQuestion