我需要创建一个 iso-8859-1 编码的 URI (java.net.URI)

I need to create an iso-8859-1 encoded URI (java.net.URI)

我正在使用 Spring 的 RestTemplate 进行休息呼叫。 RestTemplate 接受一个 URI (java.net.URI),或者一个字符串,它被 Spring 的 UriTemplate 转换成一个 URI(这个使用 UTF-8 作为编码)。

我希望将 URI 编码为 iso-8859-1,而不是 UTF-8。有没有一种方法可以用 java.net.URI 来做到这一点(或者我可以用 Spring 的 UriTemplate 来做到这一点)

例如,我有参数 q=Øyvind

这个的iso-8859-1编码(我想要的)是:q=%D8yvind

这个的UTF-8编码是:q=%C3%98yvind

如果我先将字符串编码为 iso-8859-1,然后创建一个 URI,它将如下所示:q=%25D8yvind

我找到了答案,使用 Spring UriComponentBuilder

UriComponentsBuilder urlBuilder = UriComponentsBuilder.fromHttpUrl(url);
uri = urlBuilder.build().encode("ISO-8859-1").toUri();

如果有人有不使用 UriCompomentBuilder 的解决方案,我相信其他人会很感激。