[삽질]03 iconv-lite : decode()-ing strings is deprecated.

유민규·2020년 8월 7일
0

삽질

목록 보기
3/4
post-thumbnail

iconv-lite : decode()-ing strings is deprecated.

링커벨 카테고리 분류가 잘 안되는 문제가 발생했다. 분명 문제 없이 잘 됐었는데 갑자기 왜 안되는지 모르겠다.

이유를 알아보기 위해 postman에서 같은 조건으로 테스트를 진행해봤다.

에러를 보고 iconv-lite를 잘못 설정했다고 생각했다.

위 사진 첫줄에 나온 레퍼런스)와 스택오버플로우에 관련 내용, 다양한 블로그의 글을 찾아보며 iconv-lite설정에 잘못된 점이 없는지 찾아봤다.

그 결과 다음과 같은 정보를 얻었다.

이중 디코딩을 했을 가능성이 있다.

다음과 같이 작성했다고 하자

var http = require('http'),
    iconv = require('iconv-lite');

http.get("http://website.com/", function(res) {
  var body = '';
  res.on('data', function(chunk) {
    body += chunk;
  });
  res.on('end', function() {
    var decodedBody = iconv.decode(body, 'win1252');
    console.log(decodedBody);
  });
});

위 코드에서 body += chunk는 실제로 다음과 같은 일이 발생한다.

res.on('data',function(chunkBuffer){
    body += chunkBuffer.toString('utf8');
});

이는 백그라운드에서 res.setEncoding('utf8');이 진행된다.

이중 인코딩은 utf8 변환이 손실되고 잘못된 결과를 가져올 수 있다. 또한 원래의 바이트도 복원할 수 없어 iconv.decode(new Buffer(body, 'utf8'), win1252')도 도움이 되지 않는다.

이 부분을 조금 더 확인해봐야겠다.


Photo by Daniel Lincoln on Unsplash

ashtuchkin,iconv-lite, Use Buffers when decoding

profile
올라운더가 되고싶은 욕심많은 백엔드 개발자

0개의 댓글