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