使用 axios 请求 gbk 编码的网站,将会出现乱码,原因很简单,node 默认字符编码为 utf8,如果要正常显示 gbk 数据的话就需要将 gbk 转 utf8 格式。
借助iconv-lite
,不让 axios 自动处理响应数据,添加responseType
和transformResponse
参数,演示代码如下
jsimport axios from 'axios'
import * as iconv from 'iconv-lite'
axios
.get(`https://www.ip138.com/`, {
responseType: 'arraybuffer',
transformResponse: [
function (data) {
return iconv.decode(data, 'gbk')
},
],
})
.then((res) => {
console.log(res.data)
})
或者不使用transformResponse
,在响应结束后使用iconv.decode(res.data, 'gbk')
,使用transformResponse
相对优雅一点。
如果返回的是 json 格式的话,可以直接JSON.parse
转为 json 对象(前提得确保是 json 格式,不然解析报错)
jsreturn JSON.parse(iconv.decode(data, 'gbk'))
本文作者:任浪漫
本文链接:
版权声明:本博客所有文章除特别声明外,均采用 CC BY-NC-ND 4.0 许可协议。转载请注明出处!