request-promise를 통해 가져온 euc-kr 문자열 인코딩 문제 해결 (iconv)
web/node.js

request-promise를 통해 가져온 euc-kr 문자열 인코딩 문제 해결 (iconv)

반응형

크롤러를 만들기위해 필요로하는 페이지를 가지고 오기위해 request-promise를 사용하였다. 

요새 대부분의 홈페이지는 utf-8을 사용하기 때문에 큰 문제가 없으나 euc-kr를 사용하는 옛날 사이트들이 있다.

그런 사이트들의 정보를 그냥 request해서 가지고 오게되면 한글이 다 깨져버린다. 그것을 해결해보자.

우선 request-promise를 사용하여 데이터를 가지고 와보자.

1
2
3
4
5
6
7
8
const request = require('request-promise');
 
class Crawler {
 
  async crawler() {
    let doc = await reqest('http://url');
  }
}
cs


역시 euc-kr를 사용하는 것을 확인하고 있고 깨져있다.


iconv-lite를 사용한 디코딩

문자열의 인코딩, 디코딩을 제공해주는 라이브러리 iconv-lite 라이브러리를 다운 받는다.

1
npm install iconv-lite --save
cs


그리고 다음과 euc-kr로 인코딩 되어있는 문장을 euc-kr로 디코딩해주면 된다. 

주의※
만약 request-promise로 데이터를  데이터를 가지고 오는것이라면 encoding: null 속성을 null로 해주어야 정상적으로 디코딩이 되니 꼭 참고해야한다.

1
    let doc = iconv.decode(new Buffer(await request({url: 'http://', encoding: null})), 'EUC-KR').toString();
cs


decoding이 된 문자열

반응형