Node 는 자바스크립트 기반이므로 기본적으로 UTF 8 인코딩을 사용한다. EUC KR 인코딩을 사용하는 웹사이트를 스크래핑할 경우 한글이 깨지는 문제가 발생 - OhMinsSup/tip-review GitHub Wiki
const rp = require('request-promise');
const { Iconv } = require("iconv");
const jschardet = require('jschardet');
const cheerio = require("cheerio");
function anyToUtf8(str) {
const {encoding} = jschardet.detect(str);
console.log("source encoding = " + encoding);
const iconv = new Iconv(encoding, 'utf-8//translit//ignore');
return iconv.convert(str).toString();
}
rp({
url: "https://www.aladin.co.kr/shop/wproduct.aspx?ItemId=168915737",
encoding: null
}).then(anyToUtf8)
.then(function (htmlString) {
let $ = cheerio.load(htmlString);
let title = $("meta[property='og:title']").attr("content");
let desc = $("meta[property='og:description']").attr("content");
console.log(title);
console.log(desc);
})
.catch(function (err) {
console.log(err)
});
// anyToUtf8 함수는 http://ohgyun.com/665 글의 아래 함수를 참고하였다.
function eucKrToUtf8(str) {
var iconv = new Iconv('euc-kr', 'utf-8');
var buf = new Buffer(str, 'binary');
return iconv.convert(buf).toString();
}