Blog

반응형

HTTP request를 전달을 해야 하는데, 서버가 EUC-KR을 받아야 하는 경우가 있습니다.

encodeURI나 encodeURIComponent를 할 경우 UTF-8인 상태에서 변환이 이뤄지게 됩니다.

수신하는 쪽에서 UTF-8를 EUC-KR로 변환을 한다면은 문제가 없겠지만, 

EUC-KR로 보내야 한다면 iconv 라이브러리를 이용하여 전달을 하면 됩니다.

 var Iconv  = require('iconv').Iconv;
 var iconv  = new Iconv('utf-8', 'euc-kr');
 var buffer = iconv.convert('한글 파라미터'); 
 var param1 = escape(buffer.toString('binary'));

위와 같이 인코딩을 변경 후 buffer 저장된 값을 escape를 해 주면 됩니다.

 

encoding 및 decoding시 값 확인은 아래 사이트에서 확인할 수 있습니다.

https://dencode.com/string/hex

반응형

반응형

NodeJS로 개발을 진행 중 TCP 통신으로 다른 서버와 연결을 해야 하는 경우가 있습니다.

그 서버 인코딩이 UTF-8이라면은 아무런 문제 없이 개발을 할 수 있겠지만,

서버 인코딩이 EUC-KR일 경우 받는 쪽에서는 문자열이 깨져서 수신이 되게 됩니다.

 

보낼때 iconv 등을 통해서 인코딩을 EUC-KR로 변경해서 보내면 되겠지라고 생각 하지만,

TCP write시 인코딩은 UTF-8과 binary만 지정이 가능합니다.

역시나 받는쪽에서도 인코딩이 깨져서 수신이 됩니다.

 

서버 쪽에서 해당 하는 부분을 대응해서 개발을 해 주면 좋겠지만,

그렇지 않을 때에는 보낼때 EUC-KR로 보내야 합니다.

 

관련한 정보를 찾아보던 중에 문자열을 보내는게 아니라 buffer 형태로 보내는 방법을 찾게 되었습니다.

iconv를 통해서 UTF-8 문자열을 EUC-KR로 변경을 하면 buffer array가 반환이 됩니다.

이 값을 그대로 전달을 하면 EUC-KR 문자열을 전달 할 수가 있습니다.

 

TCP 연결 코드는 별도로 설명하지 않겠습니다. 

해당 부분은 검색하면 많이 나와서 생략하였습니다.

먼저 stream 모듈을 설치를 해 주세요.

그리고 write 함수를 사용하는 부분을 아래 코드와 같이 변경을 해 주시면 됩니다.

const stream 		= require('stream');

let readStream = new stream.PassThrough();
readStream.end(new Buffer('Test data.'));
readStream.pipe(client);

송수신 문자열은 iconv를 통해서 UTF-8 또는 EUC-KR로 변환을 해 주시면 됩니다.

반응형