首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >URLEncoder无法转换空格字符

URLEncoder无法转换空格字符
EN

Stack Overflow用户
提问于 2011-01-20 00:26:06
回答 11查看 203.2K关注 0票数 212

我期待着

代码语言:javascript
复制
System.out.println(java.net.URLEncoder.encode("Hello World", "UTF-8"));

要输出,请执行以下操作:

Hello%20World

(20是表示空格的ASCII十六进制代码)

然而,我得到的是:

Hello+World

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

EN

回答 11

Stack Overflow用户

发布于 2015-07-24 02:10:13

空格在URL中编码为%20,在表单提交的数据中编码为+ (内容类型应用程序/x-www-form-urlencoded)。你需要前者。

使用Guava

代码语言:javascript
复制
dependencies {
     compile 'com.google.guava:guava:23.0'
     // or, for Android:
     compile 'com.google.guava:guava:23.0-android'
}

您可以使用UrlEscapers

代码语言:javascript
复制
String encodedString = UrlEscapers.urlFragmentEscaper().escape(inputString);

不要使用String.replace,这只会对空格进行编码。请改用库。

票数 67
EN

Stack Overflow用户

发布于 2011-01-20 00:30:48

编码查询参数

代码语言:javascript
复制
org.apache.commons.httpclient.util.URIUtil
    URIUtil.encodeQuery(input);

或者如果您想转义URI中的字符

代码语言:javascript
复制
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;
 }
票数 23
EN

Stack Overflow用户

发布于 2017-09-12 05:56:51

在Android上也一直在为此而苦苦挣扎,我偶然发现了Uri.encode(String,String),而特定于android的(android.net.Uri)可能会对一些人有用。

静态字符串编码(字符串% s,字符串允许)

https://developer.android.com/reference/android/net/Uri.html#encode(java.lang.String, java.lang.String)

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4737841

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档