Created 2018年10月14日22:12
Updated 2018年10月14日22:13
Categories
スクレイピング
nodejs
めっちゃしんどかったのでメモ。
axiosでShift-JISのWebページを取得したら文字化けしました。
ヘッダーはちゃんと設定されているのですが、axios自体がUTF-8以外には対応してないみたいです。
(Shift-JISの対応なんてしなくても良いので全然良いのですが・・・)
axiosでエンコードされる前のデータを取得し、iconv-liteで変換します。
import axios from 'axios'
var iconv = require('iconv-lite')
axios.get(siteUrl, {responseType: 'arraybuffer'})
.then(function (response) {
var body = iconv.decode(Buffer.from(response.data), 'windows-31j')
console.log(body)
})
responseType: 'arraybuffer'}
を設定することでArrayBufferとして結果を取得します。
最初はArrayBufferそのままiconvに投げられると思ったのですが、空文字列が帰ってきてしまいダメでした。
一度Bufferに変換してからiconvに食わせるのが良いみたいです。
弊学のWebサイトがShift-JISだった事に怒りが隠せません。
Shift-JISとそれを未だに使うような任意団体は早く滅びて。