在Java中使用URLConnection获取http请求的返回结果乱码

Java后台需要访问一个外部api拿一些数据,但是网上大部分的那些代码运行起来的结果都是乱码。

大概就这样的:

URLConnection conn = url.openConnection();
conn.connect();

        InputStream in = conn.getInputStream();
        InputStreamReader inn = new InputStreamReader(in,"utf-8");
        BufferedReader bufferedReader = new BufferedReader(inn);
        String line;
        StringBuilder builder = new StringBuilder();
        while ((line = bufferedReader.readLine()) != null){
            builder.append(line);
        }
        System.out.println(builder.toString());

找遍了各种地方都没解决,比如什么ide编码,控制台编码等,都调成一致的utf8,但是还是乱码。

最后在群友的帮助下,了解到可能是数据还没有解压缩,需要添加一个GZIPInputStream类

修改后如下

URLConnection conn = url.openConnection();
        conn.connect();

        InputStream in = conn.getInputStream();

        //解压input流内容
        GZIPInputStream gzip = new GZIPInputStream(in);

        InputStreamReader inn = new InputStreamReader(gzip,"utf-8");
        BufferedReader bufferedReader = new BufferedReader(inn);
        String line;
        StringBuilder builder = new StringBuilder();
        while ((line = bufferedReader.readLine()) != null){
            builder.append(line);
        }
        System.out.println(builder.toString());

这样改了以后再获取的数据就没有乱码问题了。

(不过这之中了解到一个叫hutool的Java工具包,非常好用,https://hutool.cn,上面这一长串的代码可以直接简化为一行HttpUtil.get(String Url)就解决了)

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值