解决 golang 中 invalid character ‘\x1f‘ looking for beginning of value

最近网关又接入了个项目,不过在解析接口返回的 json 串时,却是乱码,查看报错如下

invalid character '\x1f' looking for beginning of value

程序中的解析代码为

content, _ := ioutil.ReadAll(res.Body)
err = json.Unmarshal(content, &data)
if err != nil {
	fmt.Println(err.Error())
}

之前的项目接口解析还是好好的,为啥这个项目不行呢,于是打断点调试

res, err := cli.Do(req)

并分别调用两个项目接口,这一对比就发现了,新接入的项目接口返回头里有

Content-Encoding: gzip

原来是用 gzip 压缩了,因此网关需判断头里是否有此 header 头,再用 compress/gzip 解压即可。

// 是否有 gzip
gzipFlag := false
for k, v := range res.Header {
	if strings.ToLower(k) == "content-encoding" && strings.ToLower(v[0]) == "gzip" {
		gzipFlag = true
	}
}

var content []byte
if gzipFlag {

	// 创建 gzip.Reader
	gr, err := gzip.NewReader(res.Body)
	defer gr.Close()
	if err != nil {
		fmt.Println(err.Error())
	}
	content, _ = ioutil.ReadAll(gr)
} else {
	content, _ = ioutil.ReadAll(res.Body)
}

err = json.Unmarshal(content, &data)
if err != nil {
	fmt.Println(err.Error())
}
  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值