Codificación de parámetros de consulta de URL en Java

¿Cómo se codifican los parámetros de consulta para ir a una url en Java? Lo sé, esto parece una pregunta obvia y ya formulada.

Hay dos sutilezas de las que no estoy seguro:

¿Deben codificarse los espacios en la URL como "+" o como "% 20"? En Chrome, si escribo "http://google.com/foo=?bar me", Chrome cambia su codificación con% 20 ¿Es necesario / correcto codificar los dos puntos ":" como% 3B? Chrome no lo hace.

Notas:

java.net.URLEncoder.encode no parece funcionar, parece ser que los datos de codificación se envían de forma. Por ejemplo, codifica el espacio como+ en lugar de%20, y codifica dos puntos que no es necesario.java.net.URI no codifica los parámetros de consulta

Respuestas a la pregunta(5)

Su respuesta a la pregunta