有谁知道一个好的Scala或Java库可以解决格式错误的URI中的常见问题,例如包含应转义但不能转义的字符?

最佳答案

我已经测试了一些库,包括HTTPClient的旧版URIUtil,却没有发现任何可行的解决方案。通常,我使用这种java.net.URI结构已经取得了足够的成功:

/**
 * Tries to construct an url by breaking it up into its smallest elements
 * and encode each component individually using the full URI constructor:
 *
 *    foo://example.com:8042/over/there?name=ferret#nose
 *    \_/   \______________/\_________/ \_________/ \__/
 *     |           |            |            |        |
 *  scheme     authority       path        query   fragment
 */
public URI parseUrl(String s) throws Exception {
   URL u = new URL(s);
   return new URI(
        u.getProtocol(),
        u.getAuthority(),
        u.getPath(),
        u.getQuery(),
        u.getRef());
}

可以与以下例程结合使用。它会反复解码URL,直到解码后的字符串不变为止,这对于例如双重编码很有用。请注意,为简单起见,此示例不包含任何故障保险等。
public String urlDecode(String url, String encoding) throws UnsupportedEncodingException, IllegalArgumentException {
    String result = URLDecoder.decode(url, encoding);
    return result.equals(url) ? result : urlDecode(result, encoding);
}

10-02 02:41