我期待着
System.out.println(java.net.URLEncoder.encode("Hello World", "UTF-8"));
要输出,请执行以下操作:
Hello%20World
(20是表示空格的ASCII十六进制代码)
然而,我得到的是:
Hello+World
我是不是用错了方法?我应该使用的正确方法是什么?
发布于 2015-07-24 02:10:13
空格在URL中编码为%20
,在表单提交的数据中编码为+
(内容类型应用程序/x-www-form-urlencoded)。你需要前者。
使用Guava
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,这只会对空格进行编码。请改用库。
发布于 2011-01-20 00:30:48
编码查询参数
org.apache.commons.httpclient.util.URIUtil
URIUtil.encodeQuery(input);
或者如果您想转义URI中的字符
public static String escapeURIPathParam(String input) {
StringBuilder resultStr = new StringBuilder();
for (char ch : input.toCharArray()) {
if (isUnsafe(ch)) {
resultStr.append('%');
resultStr.append(toHex(ch / 16));
resultStr.append(toHex(ch % 16));
} else{
resultStr.append(ch);
}
}
return resultStr.toString();
}
private static char toHex(int ch) {
return (char) (ch < 10 ? '0' + ch : 'A' + ch - 10);
}
private static boolean isUnsafe(char ch) {
if (ch > 128 || ch < 0)
return true;
return " %$&+,/:;=?@<>#%".indexOf(ch) >= 0;
}
发布于 2017-09-12 05:56:51
在Android上也一直在为此而苦苦挣扎,我偶然发现了Uri.encode(String,String),而特定于android的(android.net.Uri)可能会对一些人有用。
静态字符串编码(字符串% s,字符串允许)
https://stackoverflow.com/questions/4737841
复制相似问题