2017-08-08
node에서 request 모듈을 사용시에 가져온 body의 한글이 잔뜩 깨져 있는 모습을 볼 수 있다. 보통 해당 사이트의 charset이 EUC-KR일 경우 이런 현상이 발생하는데, 아래와 같은 방법으로 해결 가능하다.
const request = require('request')
const iconv = require('iconv-lite') //인코딩을 변환 해주는 모듈, 필자는 iconv보다 iconv-lite를 선호한다.
const charset = require('charset') //해당 사이트의 charset값을 알 수 있게 해준다.

request({
		url:"http://b1ix.net" // 원하는 url값을 입력
		,encoding: null //해당 값을 null로 해주어야 제대로 iconv가 제대로 decode 해준다.
	}
	,function (error, res, body) {
		if( !error && res.statusCode == 200 )
		{
			const enc = charset(res.headers, body) // 해당 사이트의 charset값을 획득
			const i_result = iconv.decode(body, enc) // 획득한 charset값으로 body를 디코딩
			console.log( i_result )
		}
	}
})

iconv-lite와 charset 모듈을 이용하여, 비단 한글뿐만 아니라, 다른 charset값들도 알아서 디코딩 해주는 구문을 만들어 보았다.
응용은 알아서 해보기 바란다.