我在期待

System.out.println(java.net.URLEncoder.encode("Hello World", "UTF-8"));

输出:

你好%20世界

(20是ASCII十六进制空格码)

然而,我得到的是:

你好+世界

我用错方法了吗?我应该使用的正确方法是什么?


当前回答

“+”是正确的。如果你真的需要%20,然后自己替换加。

警告:这个答案有很大的争议(+8 vs. -6),所以对这个答案持保留态度。

其他回答

如果你想编码URI路径组件,你也可以使用标准的JDK函数,例如:

public static String encodeURLPathComponent(String path) {
    try {
        return new URI(null, null, path, null).toASCIIString();
    } catch (URISyntaxException e) {
        // do some error handling
    }
    return "";
}

URI类还可以用于编码URI的不同部分或整个URI。

查看uri类。

一个空格在url中被编码为%20,在表单提交的数据中被编码为+(内容类型为application/x-www-form-urlencoded)。你需要前者。

使用番石榴:

dependencies {
     compile 'com.google.guava:guava:23.0'
     // or, for Android:
     compile 'com.google.guava:guava:23.0-android'
}

你可以使用UrlEscapers:

String encodedString = UrlEscapers.urlFragmentEscaper().escape(inputString);

不要使用String。替换,这只会编码空间。使用库代替。

如果您正在使用jetty,那么org.eclipse.jetty.util.URIUtil将解决这个问题。

String encoded_string = URIUtil.encodePath(not_encoded_string).toString();

这对我很有效

org.apache.catalina.util.URLEncoder ul = new org.apache.catalina.util.URLEncoder().encode("MY URL");