日々精進

新しく学んだことを書き留めていきます

NodeでShift-JISのページをスクレイピングしたら文字化けする

Nodeは基本的にUTF8しか扱えないのでスクレイピングしてきた文字列がShift-JISとかだったらUTF8に変換してやる必要がある。
が、node-iconvを使って変換しても文字化けが直らず困った。
調査してみると、どうもrequestライブラリがHTMLを取ってきたときに文字コードを変換してるっぽい?
requestで取ってきたHTMLをそのままファイルに保存して、ShiftJISで解釈しても文字化けしていた。
たぶんrequestがHTMLの文字コードを推定して、その文字コードからUTF8に変換するけど推定結果が間違えててデータが壊れてしまった、というのが原因では。
requestにencoding:"binary"を指定すると文字コードを変換しないので、これで取ってきた後でnode-iconvで変換したら無事文字化けが直った。


参考:
node.jsでutf8以外の文字コードのページを取得する - tutuming's sandbox
Node.js - node-iconvで使える文字コードを調べてみた - Qiita