流读取数据的时候字符乱码的终极解决办法。

前几天通过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(),转码一下就可以了,但是更令人诧异的是:获得的结果却是部分乱码:
流读取数据的时候字符乱码的终极解决办法。_第1张图片

网上查了好多内容但是无果,网上说的都是通过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;
		}
		
	}
通过上面的方式就可以达到转码的方式

你可能感兴趣的:(流读取数据的时候字符乱码的终极解决办法。)