[英]Properly encoding percent sign (%) in Apachi Http Client form post using UrlEncode
这似乎是一个非常简单的问题,但是a,我无法解决,也无法在其他任何地方找到解决方案。 我正在串联一个包含%的字符串,由于某种原因,它在%之后添加了数字25。 有人知道解决这个简单问题的方法吗?
String buttonCheck = "%26" + DATABASE.getValue("buttonCheck") + "%26";
出来
"%2526value%2526"
编辑:很明显,问题实际上在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);
}
而不是发送表单值
buttoncheck=%26value%26
我明白了
buttoncheck=%2526value%2526
在buttonCheck
,它将不会显示为“%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"
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.