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' } 라는 값을 줘야 합니다.
이상으로 포스팅을 마치겠습니다. 혹시나 문제가 발생하시면 댓글 달아주세요.
서로 이웃 추가는 항상 환영합니다. :)
'프로그래밍 > etc. (Language)' 카테고리의 다른 글
[Node.js] JSON 데이터의 key(name) 부분을 동적으로 만드는 방법 (2) | 2019.06.19 |
---|---|
[Node.js] 구글 트렌드에서 인기 급상승 검색어를 웹크롤링 해보자. (1) | 2019.05.23 |
[GIT] git 추적하지 않는 파일 (untracked files) 제거 하는 방법 (1) | 2019.01.20 |
[JavaScript] 티스토리 블로그에 자바스크립트 함수 호출하기 (7) | 2018.09.04 |
[JavaScript] 자바스크립트로 URL 파라미터 값 가져오기 (3) | 2018.07.10 |
댓글