Shift-JISのWebページをaxiosで取得

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とそれを未だに使うような任意団体は早く滅びて。

コメントを投稿

コメント