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

前几天通过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;
		}
		
	}
通过上面的方式就可以达到转码的方式

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值