【问题标题】:how can I use encoding URIbuilder() method in Java如何在 Java 中使用编码 URIbuilder() 方法
【发布时间】:2015-10-14 09:21:39
【问题描述】:

我在 JAVA 中使用了一些 API。

我需要在 URI 中使用韩文,request 是 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(). ;

但我得到了相同的结果。

我该如何解决这个问题?

【问题讨论】:

    标签: java url encoding uri encode


    【解决方案1】:

    您的 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 确认:

    URI 是一组非常有限的字符序列: 基本拉丁字母、数字和一些特殊的字母 字符。

    后来它说:

    百分比编码的八位字节 [...] 可以在 URI 中使用 表示 US-ASCII 编码字符范围之外的字符 如果方案或协议允许此表示,则设置 引用 URI 的元素。

    你得到的字符是什么。

    希望你觉得这很有用。

    【讨论】:

    • 非常感谢!我也有其他路线.. 最终 URI uri2 = new URI( uri.getScheme() + "://" + uri.getHost() + uri.getPath() + "?" + uri.getQuery());
    • 我不知道为什么没有中断文本,但我认为比我的代码更好,真的谢谢!!
    猜你喜欢
    • 2016-11-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-10-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多