URL编码器无法翻译空格字符
我期待
System.out.println(java.net.URLEncoder.encode("Hello World", "UTF-8"));
输出:
Hello%20World
(20 是空间的 ASCII 十六进制代码)
但是,我得到的是:
Hello+World
我是否使用了错误的方法?我应该使用的正确方法是什么?
我期待
System.out.println(java.net.URLEncoder.encode("Hello World", "UTF-8"));
输出:
Hello%20World
(20 是空间的 ASCII 十六进制代码)
但是,我得到的是:
Hello+World
我是否使用了错误的方法?我应该使用的正确方法是什么?
这按预期方式运行。实现了有关如何在 HTML 表单中对 URL 进行编码的 HTML 规范。URLEncoder
来自 javadocs:
此类包含用于将字符串转换为应用程序/x-www-form-urlencoded MIME 格式的静态方法。
和从 HTML 规范:
application/x-www-form-urlencoded
使用此内容类型提交的表单必须按如下方式进行编码:
- 控件名称和值已转义。空格字符将替换为“+”
您必须替换它,例如:
System.out.println(java.net.URLEncoder.encode("Hello World", "UTF-8").replace("+", "%20"));
空格在 URL 中编码,并在表单中编码为提交数据(内容类型 application/x-www-form-urlencoded)。你需要前者。%20
+
使用番石榴:
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.replace,这只会对空间进行编码。请改用库。