踩坑

网页gbk乱码处理

使用 axios 请求 gbk 编码的网站,将会出现乱码,原因很简单,node 默认字符编码为 utf8,如果要正常显示 gbk 数据的话就需要将 gbk 转 utf8 格式。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
import 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)
})

// 或者使用async 和 await
async function request(url) {
let result = await axios
.get(url, {
responseType: 'arraybuffer',
transformResponse: [
function (data) {
return iconv.decode(data, 'gbk')
},
],
})

return result.data
}

或者不使用transformResponse,在响应结束后使用iconv.decode(res.data, 'gbk'),使用transformResponse相对优雅一点。

如果返回的是 json 格式的话,可以直接JSON.parse转为 json 对象(前提得确保是 json 格式,不然解析报错)

return JSON.parse(iconv.decode(data, 'gbk'))

原文链接