如何在 Java 中使用编码 URIbuilder() 方法

how can I use encoding URIbuilder() method in Java

我在 JAVA 中使用了一些 API。

我需要在 URI 中使用韩语文本,请求是 String 变量。
如果我设置 request = "안녕하세요"; 并使用代码:

final URI uri = new URIBuilder().setScheme("https").setHost(server + "api.net").setPath("/api/" + "/" + **request**).setParameters(param).build(). ;

如果我使用它,我会看到以下结果:

https://api.net/api/%EC%95%88%EB%85%95%ED%95%98%EC%84%B8%EC%9A%94?api_key

我已经尝试使用此代码:

final URI uri = new URIBuilder().setScheme("https").setHost(server + "api.net").setPath("/api/" + "/" + **URLEncoder.encode(request, "UTF-8")**).setParameters(param).build(). ;

但我得到了相同的结果。

我该如何解决这个问题?

您的 URI 已被编码。就像 URL,你不能使用特殊字符,如果你想检索 request 字符串,你必须解码你的 URI 的特定部分,像这样:

String result = java.net.URLDecoder.decode(uri.getPath(), "UTF-8");
System.out.println(result);          // this will print "/api/안녕하세요"

RFC 3986, Uniform Resource Identifier (URI): Generic Syntax 确认:

A URI is a sequence of characters from a very limited set: the letters of the basic Latin alphabet, digits, and a few special characters.

后面说:

Percent-encoded octets [...] may be used within a URI to represent characters outside the range of the US-ASCII coded character set if this representation is allowed by the scheme or by the protocol element in which the URI is referenced.

你得到的是那一堆字符。

希望你觉得这很有用。