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();
}