12

我想做问题724043中描述的事情,即对 URI 的路径组件进行编码。建议这样做的类是Commons HttpClient 3.1 中的URIUtil。不幸的是,该类似乎从最新版本的 HttpClient 中消失了。来自 HttpClient 4.1 的类似名称的类URIUtils不提供相同的功能。此类/方法是否已移至我不知道的其他库,或者它刚刚消失了?我最好将 3.1 版本中的类复制到我的代码中,还是有更简单的方法?

4

3 回答 3

8

模块的维护者已经下令你应该使用标准的 JDK URI 类来代替:

URI 和 URIUtils 被标准 Java URI 取代的原因很简单:没有人愿意维护这些类。

有许多实用方法可以帮助解决 java.net.URI 实现的各种问题,但是标准 JRE 类应该足够了,不是吗?

因此,最简单的方法是查看 3.1 版本中的 encodePath 的源代码,并在您自己的代码中复制它的功能(或者只是将方法/类复制到您的代码库中)。

或者,您可以就您提到的问题使用已接受的答案(但似乎您必须先将 URL 分成几部分):

new URI(
    "http", 
    "search.barnesandnoble.com", 
    "/booksearch/first book.pdf",
    null).toString();
于 2010-04-09T07:42:13.790 回答
0

这可以使用org.apache.http.client.utils.URIBuilderhttpclient-4.X() 中的实用程序来实现,如下所示。

    public static String encodePath(final String path) {
       if(path.length() == 0)
          return "";
       else
          return new URIBuilder().setPath(path).toString();
    }
于 2019-12-09T00:33:19.980 回答
0

您可以使用标准 JDK函数,例如

public static String encodeURLPathComponent(String path) {
    try {
        return new URI(null, null, path, null).toASCIIString();
    } catch (URISyntaxException e) {
        // do some error handling
    }
    return "";
}
于 2021-01-19T22:12:22.003 回答