golang请求网站返回body信息乱码问题

mudssky · · 3955 次点击 · · 开始浏览    
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。

​ 这次请求的网站是bilibili,乱码的内容有很多菱形符号。

​ 一般乱码问题,我首先会考虑字符编码的问题。比如典型的日文编码SHIFT_JIS在windows系统记事本中打开,就会出现乱码。

​ 但是这次有点不一样,因为我拿notepad++打开后切换了几种常用的编码后还是乱码,参考别人写的针对b站的爬虫才发现了问题所在。b站返回的请求包是经过gzip压缩的。

​ 所以需要一个解压返回的请求的过程。为了提高代码的可维护性,还是把请求和解压,编码转换之类的固定流程封装一下比较好。

// 检测返回的body是否经过压缩,并返回解压的内容
func switchContentEncoding(res *http.Response) (bodyReader io.Reader, err error) {
    switch res.Header.Get("Content-Encoding") {
    case "gzip":
        bodyReader, err = gzip.NewReader(res.Body)
    case "deflate":
        bodyReader = flate.NewReader(res.Body)
    default:
        bodyReader = res.Body
    }
    return
}

有疑问加站长微信联系(非本文作者)

本文来自:简书

感谢作者:mudssky

查看原文:golang请求网站返回body信息乱码问题

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

3955 次点击  
加入收藏 微博
1 回复  |  直到 2022-04-20 15:33:04
暂无回复
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传