node.jsでeuc-jpのサイトをスクレイピングしようとしたらハマった。
文字コードを指定して変換したつもりだけど、文字化けしまくってた。
ダメな例
var request = require('request');
var Iconv = require('iconv').Iconv;
var fs = require('fs');
request('http://hoge.jp', function (error, response, body) {
if (!error && response.statusCode == 200) {
var iconv = new Iconv('EUC-JP', 'UTF-8//TRANSLIT//IGNORE');
body = iconv.convert(body).toString();
fs.writeFile('hoge.txt', body);
}
});
良い例
var request = require('request');
var Iconv = require('iconv').Iconv;
var fs = require('fs');
request({url: 'http://hoge.jp', encoding: null }, function (error, response, body) {
if (!error && response.statusCode == 200) {
var iconv = new Iconv('EUC-JP', 'UTF-8//TRANSLIT//IGNORE');
body = iconv.convert(body).toString();
fs.writeFile('hoge.txt', body);
}
});
文字コードを明確にnull
を指定しないと、request
のモジュール内で勝手にbody.toString()
とよしなに変換してくれようとするのです!
この辺。
ってか、参考サイトそのままコピペしたようなコードになっておる。。。
地味にハマりました。。。(泣)