Java 使用UrlEncode在Apachi Http客户端表单post中正确编码百分号(%)

Java 使用UrlEncode在Apachi Http客户端表单post中正确编码百分号(%),java,Java,这似乎是一个极其简单的问题,但可惜我无法解决它,也无法在其他任何地方找到解决方案。我连接了一个字符串,其中有一个%并且由于某种原因它在%后面加上了数字25。有人知道这个简单问题的解决办法吗 String buttonCheck = "%26" + DATABASE.getValue("buttonCheck") + "%26"; 出来 "%2526value%2526" 编辑:很明显,这个问题实际上在URL编码中,我将向这个问题添加更多相关数据 我正在开发一个Android应用程序,它可以解

这似乎是一个极其简单的问题,但可惜我无法解决它,也无法在其他任何地方找到解决方案。我连接了一个字符串,其中有一个%并且由于某种原因它在%后面加上了数字25。有人知道这个简单问题的解决办法吗

String buttonCheck = "%26" + DATABASE.getValue("buttonCheck") + "%26";
出来

"%2526value%2526"
编辑:很明显,这个问题实际上在URL编码中,我将向这个问题添加更多相关数据

我正在开发一个Android应用程序,它可以解析网站上的HTML,并允许用户通过Android用户界面与之交互。我在将%编码为表单的参数时遇到问题

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);
}
我明白了

它不会在
臀部中显示为“%2526value%2526”。我强烈怀疑您稍后会看到一个值——例如,在URI编码之后。找出是什么在进行编码,以及你真正想被编码的是什么

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

String buttonCheck = "%" + DATABASE.getValue("buttonCheck") + "%";
在那一点上,我怀疑你会

%25value%25
基本上,有些东西只是将%编码为%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
    }
}

根据对问题的回答,我猜字符串中的
%
文字被编码为
%25
。这解释了添加的
25
。如果没有看到相关的代码,我们将无法知道它为什么首先到达那里。

显然,当字符串成为URI的一部分时,它经历了“百分比编码”

如果是这种情况,你不应该这么早做百分比编码。反而

String buttonCheck = "&" + DATABASE.getValue("buttonCheck") + "&";
这将在URI中作为

"%26value%26"

不能复制。请给出所有相关的代码。我不知道为什么现在是这样,但我只想指出,
%
是ASCII
0x25
。因此,至少在这里,它与字符串中的某些内容有关。@org.life.java我高度怀疑25在26之前出现。我能理解是不是在之后,但事实并非如此。数据库只是一个类,它有访问散列映射的方法,没有什么特别之处。然后,我将臀部添加到另一个用于HttpClient发布的地图中。啊,我还应该补充一点,在通过Http post发送字符串之后,我读取了该字符串。我会调查的。我认为jon skeet的答案是合理的。我不100%确定URLEncodedFormEntity是如何工作的。setEntity(新的UrlEncodedFormEntity(nvps,HTTP.UTF_8));是相关代码,nvps是读取臀部的基本名称对。我看不出哪里会出错。我在我的OP中添加了相关代码。我相信你在这个问题上是正确的。知道补救方法吗?@Alejandro:这是使用Apache HTTP客户端吗?恐怕我已经有一段时间没用了。也不完全清楚你到底想要实现什么。我建议你开始一个新的问题,非常清楚地说明更大的图景是什么,你正在使用什么代码等等。如果你能把它放在一个简短但完整的程序中,其他人可以运行,这将是理想的。是的,它是Apache HTTP客户端。我会这样做的,谢谢。你发布的问题确实有完全相同的问题,但这是基于javascript的。我正试图在apache站点上找到一个解决方案。这正是我在调查URLEncoding如何工作后发现的问题。我正在查看从浏览器发送的数据。
String buttonCheck = "&" + DATABASE.getValue("buttonCheck") + "&";
"%26value%26"