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()とよしなに変換してくれようとするのです!
この辺。
ってか、参考サイトそのままコピペしたようなコードになっておる。。。
地味にハマりました。。。(泣)