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

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

by _BlankSpace 2019. 4. 17.

Node.js로 긴급하게 스크립트를 짜다가 인코딩 관련 문제에 부딪혔습니다.

아무래도 문자열 관련 작업이다 보니, 필연적이었겠지만..

 

또한, 한글 뿐만 아니라 여러 언어에서도 인코딩이 가능해야 해서 열심히 구글링을 하였습니다.

아무래도 euc-kr 문자열에서 utf-8 문자열로 변경하는 코드는 많았지만, 반대 상황은 찾기가 힘들었습니다.

 

그러던 도중에 방법을 찾게 되어 포스팅합니다.

 

혹시나, 한글(여러 언어)에서 hex 또는 utf-8로, hex에서 utf-8 또는 한글(여러 언어)로 변환하는 방법이 궁금하시면 아래 글을 읽어주세요.

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

 

먼저, 인코딩을 하려면 iconv-lite를 설치해야 합니다. 아래 명령어로 iconv-lite를 설치해주세요.

1
npm install iconv-lite
cs

 

설치를 완료하셨다면, 변환을 진행해보겠습니다.

 

1. utf-8 문자열을 hex 문자열로 변환하기.

굉장히 간단하니, 간단한 코드 예제로 설명하겠습니다.

1
2
3
4
5
6
7
8
9
var fs = require('fs');
var iconv = require('iconv-lite');
 
var utf8String = iconv.encode("한글 인코딩 테스트"'utf-8');
 
var hexString = utf8String.toString('hex');
for (let i = 0; i < hexString.length; i+=2) {
    process.stdout.write("\\x" + hexString.slice(i, i + 2).toString('hex'));
}
cs

 

>결과 <: \xed\x95\x9c\xea\xb8\x80\x20\xec\x9d\xb8\xec\xbd\x94\xeb\x94\xa9\x20\xed\x85\x8c\xec\x8a\xa4\xed\x8a\xb8

 

>설명<

2번 줄 : iconv-lite를 가져옵니다.

4번 줄 : 해당 줄을 실행하면 utf8String에 인코딩이 utf-8인 문자열이 들어갑니다.

6번 줄 : toString함수를 이용하여 hex 문자열로 변경합니다.

7번 줄 : for문을 이용하여 2자씩 끊어서 hex 문자열을 표현합니다.

 

굉장히 간단하게 utf-8을 hex 문자열로 변경할 수 있다는 것을 확인할 수 있습니다.

 

2. utf-8 문자열을 여러 나라 언어 인코딩 문자열로 변환하기.

사실 이 포스팅의 메인은 이 내용입니다.

그렇지만, 한번만 보시면 굉장히 간단하게 변환할 수 있다고 생각하실 수 있을 거에요.

 

역시나 간단하니, 아래 예제로 설명하겠습니다.

1
2
3
4
5
6
var fs = require('fs');
var iconv = require('iconv-lite');
 
var string = iconv.encode("한글 인코딩 테스트"'euc-kr');
var mbcsString = string.toString('binary');
fs.writeFileSync('test.txt', mbcsString, { encoding: 'binary' });
cs

위의 예제를 실행한 후, test.txt 파일을 실행하면 문자열이 깨지는 것을 확인할 수 있습니다.

그렇다면, 해당 언어로 제대로 변환되었다는 것입니다.

 

이 문자열이 제대로 변환되었다는 것을 확인하고자 하신다면, 뷰어의 인코딩을 언어 인코딩으로 변경하시면 되겠습니다.

(ex) 한국일 경우에는 euc-kr. 그 외 언어는 해당 언어별 인코딩.

 

>설명<

4번 줄 : iconv의 encode 함수를 이용합니다. 이때 첫 번째 인자는 변환할 문자열(utf-8), 두 번째 문자열은 변환할 인코딩 값입니다. 언어별 인코딩 정보는 다음 포스팅을 확인하세요.

 

5번 줄 : 가장 중요한 부분입니다. euc-kr로 변환한 문자열을 toString 함수를 이용하는 데, 이 때, 값을 'binary'로 설정합니다.

6번 줄 : 이 부분도 중요합니다. 이제 mbcsString에는 변환된 문자열이 있을 겁니다. 이 문자열을 텍스트 파일에 저장할 때, 3번 째 옵션에 { encoding: 'binary' } 라는 값을 줘야 합니다.

 

 

이상으로 포스팅을 마치겠습니다. 혹시나 문제가 발생하시면 댓글 달아주세요.

서로 이웃 추가는 항상 환영합니다. :)

댓글