Axios 的编码问题

Encoding issue with Axios

我正在使用 axios 获取网页,但响应的内容类型是 ISO-8859-1,而 axios 给出的结果似乎将其解析为 UTF-8 和结果有损坏的字符。

我尝试转换结果编码但没有任何效果,我认为这不是因为 this

例如在 got 库中我可以将编码设置为 null 并解决问题,但我想问你我可以用 axios 做什么来禁用自动编码或更改它?

我的方法是这样的:

  1. 请求 responseTyperesponseEncoding 设置如下
const response = await axios.request({
  method: 'GET',
  url: 'https://www.example.com',
  responseType: 'arraybuffer',
  responseEncoding: 'binary'
});
  1. reponse.data解码为所需格式
let html = iso88592.decode(response.data.toString('binary'));

注意:在我的例子中,我需要使用 this 包对其进行解码。

this github issue Matt Zabriskie recommends using an axios response interceptor 中,我认为这是最干净的选项。

axios.interceptors.response.use(response => {
    let ctype = response.headers["content-type"];
    if (ctype.includes("charset=ISO-8859-1")) {
        response.data = iconv.decode(response.data, 'ISO-8859-1');
    }
    return response;
})

在没有使用拦截器或其他包的情况下,我在缓冲区上得到了响应:

notifications = await axios.request({
    method: 'GET',
    url: Link,
    responseType: 'arraybuffer',
    reponseEncoding: 'binary'
});

接下来将其转换为:

let html = notifications.data.toString('latin1');

const notifications = await axios.request({
    method: 'GET',
    url: 'https://...your link',
    responseType: 'arraybuffer',
    reponseEncoding: 'binary'
});

const decoder = new TextDecoder('ISO-8859-1');
let html = decoder.decode(notifications.data)