日期:2014-05-17  浏览次数:20813 次

URLConnection 真是奇怪
程序用URLConnection 访问arcgis,返回查询的信息。如果是数字或英文,能够获得返回结果,如果是中文,返回结果为空(不存在中文乱码,已进行了处理,将这个地址直接复制到浏览器中,可以获取结果)。

我写的一个dmeo,上代码:

import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.net.HttpURLConnection;
import java.net.URL;

public class Test {
public static void main(String[] args) {
try {
String surl = "http://192.168.205.73:8399/arcgis/rest/services/gisrn/MapServer/0/query?f=json&outSR=21480&returnDistinctValues=false&returnGeometry=true&where=FLDCNAME+like+%27%25%E7%83%9F%E5%8F%B0%25%27&spatialRel=esriSpatialRelIntersects&outFields=FLDID%2CFLDTAG%2CFLDCNAME%2COBJECTID";
//String surl = "http://192.168.205.73:8399/arcgis/rest/services/gisrn/MapServer/0/query?f=json&outSR=21480&returnDistinctValues=false&returnGeometry=true&where=FLDCNAME+like+%27%25116%25%27&spatialRel=esriSpatialRelIntersects&outFields=FLDID%2CFLDTAG%2CFLDCNAME%2COBJECTID";
URL url = new URL(surl);
HttpURLConnection con = (HttpURLConnection) url.openConnection();
System.out.println("Received a : " + con.getClass().getName());
con.setDoInput(true);
con.setDoOutput(true);
con.setUseCaches(false);
String msg = "Hi HTTP SERVER! Just a quick hello!";
con.setRequestProperty("CONTENT_LENGTH", "" + msg.length());
// Not checked
System.out.println("Msg Length: " + msg.length());
System.out.println("Getting an output stream...");
OutputStream os = con.getOutputStream();
OutputStreamWriter osw = new OutputStreamWriter(os);
osw.write(msg);
osw.flush();
osw.close();
System.out.println("After flushing output stream. ");
System.out.println("Getting an input stream...");
InputStream is = con.getInputStream();
// any response?
InputStreamReader isr = new InputStreamReader(is);
BufferedReader br = new BufferedReader(isr);
String line = null;
while ((line = br.readLine()) != null) {
System.out.println("line: " + line);
}
} catch (Throwable t) {
t.printStackTrace();
}
}
}


第一个surl是用的中文查询条件,第二个是查询条件是数字。大家帮忙看一下,谢了!!!
URLConnection??

------解决方案--------------------
debug下,看到返回的是否有值就行了。
加上con.addRequestProperty("Content-Type","application/x-www-form-urlencoded; charset=UTF-8"); 

------解决方案--------------------
应该是你处理的时候编码问题

InputStream is = con.getInputStream();
DataInputStream dis = new DataInputStream(is);
byte d[] = new byte[dis.available()];
dis.read(