본문 바로가기
프로그래밍/etc. (Language)

[Node.js] iconv-lite 이용하여 한글(여러 언어)에서 hex, utf-8로, hex에서 utf-8, 한글(여러 언어) 로 변환하기

by _BlankSpace 2019. 6. 22.

이전에 iconv-lite를 이용하여 한글 및 여러 언어의 utf-8 문자열을 hex와 mbcs 문자열로 변경하는 방법을 포스팅했었습니다.

혹시나, 관련 내용이 필요하시면 아래 글을 참고해주세요.

 

[프로그래밍/Node.js] - [Node.js] iconv-lite 이용하여 한글(여러 언어) utf-8 에서 hex, mbcs 로 변환하기

 

그래서 이번에는 한글 및 여러 언어의 문자열(즉, mbcs) 에서 hex와 utf-8로 변환하는 방법hex 문자열에서 utf-8과 한글 및 여러 언어 문자열로 변환하는 방법을 추가로 정리하려고 합니다.

(mbcs to hex, mbcs to utf-8, hex to utf-8, hex to mbcs)

 

이러한 문자열 변환은 언어마다 꼭 필요한 경우가 있을거에요. 특히나, Nods.js 의 경우에는 웹에서 내용을 가져오는 경우가 많기 때문에 문자열 인코딩 방법 숙지는 꼭 필요하다고 생각합니다.

 

아무튼, 바로 설명 들어가도록 할께요.

 

0. 들어가기 앞서서..

일단, 이번 포스팅에서 꼭 필요한 모듈이 있습니다. 따라서, 포스팅을 따라하시려면 아래 모듈을 설치해주세요.

바로, iconv-lite 입니다. 이 모듈은 인코딩을 하는 것을 편하게 만들어 주기 때문에 사용하시면 많은 도움이 될 거에요.

$npm install iconv-lite

설치가 다 되었으면, 바로 문자열 인코딩을 진행하도록 하겠습니다.

 

1. 한글 및 여러 언어(mbcs)에서 hex, utf-8로 변환하기.

먼저, 여러 언어 중에서 예제로, 러시아어를 선택해봤습니다. 굳이, 러시아어를 택한 이유는 딱히 없습니다.

 

이전 포스팅과 마찬가지로, 굉장히 심플한 예제입니다.

 

  1 #!/usr/bin/env node
  2 var fs = require('fs');
  3 var iconv = require('iconv-lite');
  4 
  5 var data = fs.readFileSync("./RUSSIAN");
  6 console.log(data.toString()); // 러시아 언어 (mbcs)
  7 
  8 var utf8String = iconv.decode(data, 'iso-8859-5');
  9 console.log(utf8String); // 러시아 언어 -> utf-8
 10 
 11 var hexString = iconv.encode(utf8String, 'utf-8');
 12 console.log(hexString); // 러시아 언어 utf-8 -> hex

결과

1 �������� ������������.
2 яЛПЯзыковое тестирование.
3 <Buffer d1 8f d0 9b d0 9f d0 af d0 b7 d1 8b d0 ba d0 be d0 b2 d0 be d0 b5 20 d1 82 d0 b5 d1 81 d1 82 d0 b8 d1 80 d0 be d0 b2 d0 b0 d0 bd d0 b8 d0 b5 2e>

 

설명

5번 줄 : 러시아 인코딩(iso-8859-5)의 문자열을 data 변수에 읽어 옵니다.

6번 줄 : 러시아 인코딩 상태이므로, 바로 출력하면 결과의 1번 줄처럼 깨져서 나옵니다.

8~9번 줄 : 러시아 인코딩인 문자열을 해당 인코딩 정보로 decode 합니다. 그러면, 러시아 언어에서 utf-8로 문자열 인코딩이 변환됩니다.

11~12번 줄 : utf-8 상태에서 hex로 변환합니다.

 

사실, 11~12번 줄에서 러시아 언어 인코딩 상태에서 바로 hex 문자열로 변경해야 하는데, utf-8의 문자열 상태에서 hex로 변경한 이유는 나중에 hex를 읽을 때 더 편한 감이 있더라고요.

 

굳이, mbcs에서 hex로 변환할 필요가 없다면, 위처럼 utf-8 상태의 문자열을 hex로 변환하는 방법을 추천드립니다.  나중에 코드표보고 잘못되었는 지 확인하는 것도 더 편리합니다.

 

 

2. hex 문자열에서 utf-8과 한글 및 여러 언어 문자열로 변환하기.

이제, hex 문자열에서 utf-8 또는 한글 및 여러 언어(mbcs)로 변환하는 방법을 설명하도록 하겠습니다.

 

역시나, 바로 예제와 함께 설명하도록 할께요. 바로 hex 문자열을 가져오는 것보다는 위에 예제에서 추가하는 방향으로 예제를 만들어 봤습니다.

 

  1 #!/usr/bin/env node
  2 var fs = require('fs');
  3 var iconv = require('iconv-lite');
  4 
  5 var data = fs.readFileSync("./RUSSIAN");
  6 console.log(data.toString());
  7 
  8 var utf8String = iconv.decode(data, 'iso-8859-5');
  9 console.log(utf8String);
 10 
 11 var hexString = iconv.encode(utf8String, 'utf-8');
 12 console.log(hexString);
 13 
 14 var utf8String = new Buffer(hexString, "hex");
 15 console.log(utf8String.toString('utf-8'));
 16 
 17 var string = iconv.encode(utf8String.toString('utf-8'), 'iso-8859-5');
 18 var mbcsString = string.toString('binary');
 19 fs.writeFileSync('test', mbcsString, { encoding: 'binary' });

결과

1 �������� ������������.
2 яЛПЯзыковое тестирование.
3 <Buffer d1 8f d0 9b d0 9f d0 af d0 b7 d1 8b d0 ba d0 be d0 b2 d0 be d0 b5 20 d1 82 d0 b5 d1 81 d1 82 d0 b8 d1 80 d0 be d0 b2 d0 b0 d0 bd d0 b8 d0 b5 2e>

4 яЛПЯзыковое тестирование.

 

설명

일단, 1~12번줄 까지는 위에 예제와 같습니다. 때문에, 14번 줄부터 설명하도록 하겠습니다.

14~15번 줄 : hex 문자열을 Buffer로 만들고, 이 내용을 toString함수를 이용하여 utf-8 문자열로 변경합니다. 이 결과는 결과창 4번 줄처럼 러시아 utf-8언어로 변경되는 것을 확인할 수 있습니다.

17번 줄 : utf-8로 변경된 문자열을 iconv-lite를 이용하여 러시아 mbcs(iso-8859-5) 문자열로 변경합니다.

18~19번 줄 : 17번 줄에서 러시아 인코딩으로 변경하였으므로, 이제 출력을 test 파일로 출력합니다. 이때, 중요한 점은 encoding 인자로 binary를 주셔야 합니다.

 

이제, 실행하시면 test 문서가 나올텐데, 이 문서에 러시아 언어가 제대로 변환된 것을 확인하실 수 있을거에요.

이상으로 포스팅 정리를 마치겠습니다. 혹시 문제가 생기거나 내용이 잘못되었다면 댓글 남겨주세요.

댓글