通过webrequest的post传输数据的时候,如果url里面的参数带有‘%’,那么在取地址栏的参数的时候会出现空指针,或者是错误。如下列子
string URL = http://127.0.0.1/file.do ;
string postdata = "domethod=list&content=30%";
byte[] data = Encoding.Default.GetBytes(postData);
HttpWebRequest myrequest = (HttpWebRequest)WebRequest.Create(url);
myrequest.Method = "POST";
myrequest.ContentType = "application/x-www-form-urlencoded";
myrequest.ContentLength = data.Length;
Stream stream = myrequest.GetRequestStream();
//发送数据
stream.Write(data, 0, data.Length);
stream.Close();
//get response
HttpWebResponse response = (HttpWebResponse)myrequest.GetResponse();
StreamReader reader = new StreamReader(response.GetResponseStream(), Encoding.Default);
从上面的例子中看到content的值是30%,那么运行之后在java的servlet中取得的参数值是null,也就是说这里的%被转义了,那么怎么解决呢?我们可以去先了解下百分号的转义是什么样的。如下:
String sss = URLEncoder.encode( "%%%", "gbk" );
System.out.println( sss );
在控制台打印出来的是%25%25%25 , 从结果上面可以看出百分号的转义字符是%25,那么我们就只需要将上面例子里content的%替换成%25就解决问题了。