使用UrlEncode在Apachi Http Client表单中正确编码百分号(%)

Ale*_*rta 2 java

这似乎是一个非常容易的问题,但是我无法弄明白,也无法在其他任何地方找到解决方案.我正在连接一个%内的字符串,由于某种原因,它在%之后添加了数字25.有人知道这个简单问题的解决方案吗?

String buttonCheck = "%26" + DATABASE.getValue("buttonCheck") + "%26";
Run Code Online (Sandbox Code Playgroud)

出来吧

"%2526value%2526"
Run Code Online (Sandbox Code Playgroud)

编辑:很明显,问题实际上是在URL编码中,我将在问题中添加更多相关数据.

我正在开发一个Android应用程序,它从一个站点解析HTML,并允许用户通过Android UI与它进行交互.我在将%编码到表单的参数时遇到问题.

public class CLASS extends Activity
{
     DefaultHttpClient client = new DefaultHttpClient;
     String url = "http://www.url.com"
     HttpRequestBase method = new HttpPost(url);
     List<NameValuePair> nvps = new ArrayList<NameValuePair>();
     nvps.add("buttoncheck", "%26" + DATABASE.getValue("buttonCheck") + "%26");
     //DATABASE is simply a class that handles a HashMap

     HttpPost methodPost = (HttpPost) method;
     methodPost.setEntity(new UrlEncodedFormEntity(nvps, HTTP.UTF_8));
     execute(method);
}
Run Code Online (Sandbox Code Playgroud)

而不是发送表格的价值

buttoncheck=%26value%26
Run Code Online (Sandbox Code Playgroud)

我明白了

buttoncheck=%2526value%2526
Run Code Online (Sandbox Code Playgroud)

Jon*_*eet 5

它不会出现在"%2526value%2526"中buttonCheck.我强烈怀疑你以后会看到一个值 - 例如,在URI编码之后.找出正在进行编码的内容,以及您实际想要编码的内容.

需要明确的是,25与26完全不同.如果完全摆脱26,你会看到同样的事情,

String buttonCheck = "%" + DATABASE.getValue("buttonCheck") + "%";
Run Code Online (Sandbox Code Playgroud)

那时我怀疑你会得到

%25value%25
Run Code Online (Sandbox Code Playgroud)

基本上只是将%编码为%25.例如,这样做:

import java.net.*;

public class Test {
    public static void main(String[] args) throws Exception {
        String input = "%value%";
        String encoded = URLEncoder.encode(input, "utf-8");
        System.out.println(encoded); // Prints %25value%25
    }
}
Run Code Online (Sandbox Code Playgroud)