created: 2019-11-17T03:34:41.000Z
UTF-8じゃないサイトをaxiosで取得する
axiosはデフォルトでサイトの文字コードをUTF-8決め打ちでデコードしてしまう
なのでUTF-8じゃないサイトを取得すると文字化けする
以下のやり方でUTF-8以外のデコードができるようだ
responseType
にarraybuffer
を指定するtransformResponse
でresponse.data
を期待する文字コードにデコードする
自動でエンコーディングを判定してくれるchardetを使うとこんな感じになる
import * as chardet from 'chardet';
import * as iconv from 'iconv-lite';
axios.create({
responseType: 'arraybuffer',
transformResponse: data => {
const encoding = chardet.detect(data);
if (!encoding) {
throw new Error('chardet failed to detect encoding');
}
return iconv.decode(data, encoding);
}
})
参考
chardetの仕組みについて
UTF-8じゃないサイトを探す時に役に立った