我有一个网址,其中一个参数包含空格字符。如果我按原样发送它,使用HttpURLConnection,这个参数错误地传递。
如果我用%20手动替换空格,它会按预期工作,所以我想知道是否有更简洁的方法这样做虽然我希望HttpURLConnection会自动完成。也许有一种我错过的方式?
在寻找这个时,我不断碰到不推荐使用的URLEncoder.Encode,除了编码整个URL(包括http的://)之外,我找不到任何其他办法来做我做的事情。
是否有一种干净的方法来进行更换,还是应该手动进行?
url例如:http://www.domain.com?param1=name' last& param2 = 2014-31-10 11:40:00 param 1包含'和param2包含空格和:但只有空格才会产生问题。这就是为什么我不明白为什么HttpUrlConnection只对空间如此敏感。
由于
答案 0 :(得分:5)
请尝试这种方式,希望这有助于您解决问题。
URLEncoder:除字母外的所有字符(' a' ...'',' A' ..' Z&#39 ;)和数字(' 0' ...' 9')和字符'。',' - ',' *',' _'转换为'%'前面的十六进制值。
在URLEncoder类中有两种方法:
1.encode(String url):此方法在API级别1中已弃用
String encodedUrl = URLEncoder.encode(url);
2.encode(String url,String charsetName):使用charsetName命名的Charset对url进行编码。
String encodedUrl = URLEncoder.encode(url,"UTF-8");
使用方法:
String url ="http://www.domain.com";
String param1 ="?param1=";
Strinf param1value ="name'last";
String param2 ="¶m2=";
Strinf param2value ="2014-31-10 11:40:00";
String encodeUrl = url +param1+ URLEncoder.encode(param1value,"UTF-8")+param2+URLEncoder.encode(param2value,"UTF-8");
答案 1 :(得分:1)
你可以使用
String oldurl="http://pairdroid.com/whatsapp.php?a=rajesh saini";
String newurl=oldurl.replaceAll(" ","%20");
URL url = new URL(newurl);
答案 2 :(得分:0)
如URLEncoder的javadoc所述,你应该使用URLEncoder.encode(String s,String enc)
答案 3 :(得分:-2)
为什么不使用HttpClient类和HttpPost类,而不是使用HttpURLConnection。这样就可以避免URL编码的紧张。以下是如何使用的示例:
String result = "";
HttpClient httpclient = new DefaultHttpClient();
HttpPost httppost = new HttpPost(YOUR URL);
try {
ArrayList<BasicNameValuePair> nameValuePairs = new ArrayList<BasicNameValuePair>();
nameValuePairs.add(new BasicNameValuePair(PARAMETER1, VALUE1));
nameValuePairs.add(new BasicNameValuePair(PARAMETER2, VALUE2));
...
nameValuePairs.add(new BasicNameValuePair(PARAMETERn, VALUEn));
httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));
HttpResponse response = httpclient.execute(httppost);
result = EntityUtils.toString(response.getEntity());
} catch (ClientProtocolException e) {
} catch (IOException e) {
}
编辑:
String result = "";
URL url = new URL(YOUR URL);
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.setReadTimeout(10000);
conn.setConnectTimeout(15000);
conn.setRequestMethod("POST");
conn.setDoInput(true);
conn.setDoOutput(true);
List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>();
nameValuePairs.add(new BasicNameValuePair(PARAMETER1, VALUE1));
nameValuePairs.add(new BasicNameValuePair(PARAMETER2, VALUE2));
...
nameValuePairs.add(new BasicNameValuePair(PARAMETERn, VALUEn));
//Send request
OutputStream os = conn.getOutputStream();
BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(os, "UTF-8"));
writer.write(getUrlParameters(params));
writer.flush();
writer.close();
os.close();
//Get Response
InputStream is = connection.getInputStream();
BufferedReader br = new BufferedReader(new InputStreamReader(is));
String line;
StringBuffer response = new StringBuffer();
while((line = br.readLine()) != null) {
response.append(line);
response.append('\r');
}
r.close();
result = response.toString();
conn.disconnect();
getUrlParameters()方法的代码:
private String getUrlParameters(List<NameValuePair> params) throws UnsupportedEncodingException{
StringBuilder parameter = new StringBuilder();
boolean first = true;
for (NameValuePair pair : params)
{
parameter.append(URLEncoder.encode(pair.getName(), "UTF-8"));
parameter.append("=");
parameter.append(URLEncoder.encode(pair.getValue(), "UTF-8"));
parameter.append("&");
}
return parameter.toString().substring(0, parameter.length()-2);
}
但我最初的方法很容易实现,并且从来没有让我失望过。至于您希望完全使用哪种方法,请使用HttpURLConnection(Android推荐方法)或另一种方法。