前几天通过HTTP的doGet方法获取百度提供的一个接口(通过经纬度获取地理位置信息的api),代码如下:
通过上面的方式就可以达到转码的方式
public static String doGet(String urlStr){
try {
URL url = new URL(urlStr);
URLConnection con = url.openConnection();
HttpURLConnection urlCon = (HttpURLConnection) con;
urlCon.connect();
BufferedReader is = new BufferedReader(new InputStreamReader(urlCon.getInputStream()));
String line = "";
StringBuffer sb = new StringBuffer();
while(null !=(line=is.readLine())){
sb.append(line);
}
return sb.toString();
} catch (Exception e) {
System.out.println("baocuole-------------------------");
e.printStackTrace();
return null;
}
}
但是返回的结果却是乱码,一开始以为通过new String(),转码一下就可以了,但是更令人诧异的是:获得的结果却是部分乱码:
网上查了好多内容但是无果,网上说的都是通过new String()的方式转码的,但是跟我遇到的情况不一致,后来询问大神,大神跟我说了一个终极的解决该问题的方法:
在读取流的时候,通过utf-8(即你想要得到的)的方式转码一次就好了,之后不用再转码了。
代码如下:
public static String doGet(String urlStr){
try {
URL url = new URL(urlStr);
URLConnection con = url.openConnection();
HttpURLConnection urlCon = (HttpURLConnection) con;
urlCon.setRequestProperty("contentType", "UTF-8");
urlCon.connect();
BufferedReader is = new BufferedReader(new InputStreamReader(urlCon.getInputStream(),"UTF-8"));
String line = "";
StringBuffer sb = new StringBuffer();
while(null !=(line=is.readLine())){
sb.append(line);
}
return sb.toString();
} catch (Exception e) {
System.out.println("baocuole-------------------------");
e.printStackTrace();
return null;
}
}