문자코드와 인코딩 변환 방법

문자코드란?

문자코드란 컴퓨터가 사람이 알아볼 수 있는 문자로 표시하기 위해 각 문자에 할당한 고유번호를 말합니다.
초창기 문자를 나타내기 위한 아스키(ASCII)코드는 알파벳, 숫자, 특수 문자 등.. 각 문자에 해당하는 고유번호를 2진수 8비트로 지정하여 표시하였습니다.
2진수 8비트란 2진수인 01을 나타내는 스위치 8개로 고유번호를 할당한 것을 말합니다. 예를 들면 01101100A, 01101101B… 이런식으로 2의 8제곱( 256 )가지의 문자를 표시 할 수 있습니다.

하지만 아스키코드로 영문 알파벳, 숫자, 특수 문자 등 256가지 이내의 문자는 커버가 가능했지만 다양한 국가의 다양한 언어를 처리하기에는 256가지로는 부족하기 때문에 더 발전된 문자코드의 개발이 필요했습니다. 게다가 아시아권의 언어같은 경우는 8비트(1바이트)로는 부족해서 16비트(2바이트) 이상을 사용해야 처리가 가능했습니다.
그래서 각 나라의 언어에 맞게 CP37, ISO 8859, Windows-1250 등… 수많은 문자코드세트가 만들어 졌습니다. 한국의 경우는 EUC-KRCP949를 주로 사용했었고 현재도 많이 사용하고 있습니다.

하지만 문자코드에도 표준화가 필요했기 때문에 근래에는 대부분 유니코드(UTF-8, UTF-16)로 사용하는 추세입니다. 유니코드는 대부분 국가의 언어를 포함하고 있어 현재 대부분의 운영체제와 javascript, HTML, node.js등 다양한 프로그램 언어에서 기본적으로 사용되어 지고 있습니다.

Node.js에서의 문자코드

Node.js에서도 기본적으로 문자코드를 유니코드인 UTF-8을 사용합니다. 그래서 Node.js에서 사용할 프로그램을 작성할때는 꼭 UTF-8로 작성을 해야 합니다.
최근에 인기리에 사용되고 있는 모던 에디터인 Atom이나 서브라임텍스트, Visual studio Code등에서 새로 만든 문서는 기본적으로 UTF-8로 문서를 생성해 줍니다.

하지만 Node.js에서 fs모듈로 .txt 파일을 읽어들일 경우 대부분은 ANSI로 되어 있는 경우가 많은데 이럴경우 ANSIUTF-8로 변환을 해서 사용해야 합니다.

**ANSI : ** ANSI는 아스키코드(ASCII)를 말하며 **한글 Windows**에서는 EUC-KR의 확장버전인 **CP949**를 말합니다. 또한 `EUC-KR `은 아스키코드(ASCII)의 한글버전이라고 보면됩니다.

Node.js에서 문자코드 변환

Node.js에서 문자코드를 변경해 주는 모듈은 iconviconv-lite이 있습니다. iconv가 다양한 문자코드를 지원한다면 iconv-lite은 가볍고 간소화된 문자코드를 지원하고 있습니다. 그리고 jschardet 모듈은 현재 어떤 문자코드를 사용하고 있는지 모를때 알려주는 모듈 입니다.

  • iconv : 문자코드를 다른 문자코드로 변환
  • iconv-lite : 문자코드를 utf-8로 변환 또는 utf-8을 다른 문자로 변환
  • jschardet : 현재 문자코드가 어떤것인지 확인

설치

각 3개의 모듈은 아래와 같이 npm으로 설치가 가능 합니다.

# iconv 설치
$ npm install iconv

# iconv-lite 설치
$ npm install iconv-lite

# jschardet 설치
$ npm install jschardet

사용예제

iconv를 사용하여 문자코드 변경하기 입니다.

// iconv 사용 예제
var fs    = require('fs');
var Iconv = require('iconv').Iconv;

// euc-kr을 utf-8로 변환 설정
var encode = new Iconv('euc-kr', 'utf-8');

// euc-kr 파일 불러오기
var content = fs.readFileSync('test_euckr.txt');

// euc-kr을 UTF-8으로 변환
var content2 = encode.convert(content); 

// 버퍼를 문자열로 변환
var utf8Text = content2.toString('utf-8');

console.log(utf8Text);

// UTF-8으로 파일 저장
fs.writeFileSync('test_utf8.txt', utf8Text, 'utf-8');

iconv-lite를 사용하여 문자코드 변경하기 입니다.

var iconv = require('iconv-lite');
var fs    = require('fs');

// euc-kr 파일 불러오기
var content = fs.readFileSync('test_euckr.txt', "binary");

// euc-kr의 바이너리를 UTF-8로 변환
var utf8Text = iconv.decode(content, "euc-kr");

console.log(utf8Text);

// UTF-8으로 파일 저장
fs.writeFileSync('test2_utf8.txt', utf8Text, 'utf-8');

문자코드를 모를경우 jschardet 모듈로 확인하여 문자코드 변경하기 입니다.

var fs          = require('fs');
var Iconv       = require('iconv').Iconv;
var jschardet   = require('jschardet');

// 뮨자코드를 모르는 파일 불러오기
var content = fs.readFileSync('test_unknown.txt');

// 문자코드 확인
var content2 = jschardet.detect(content);
console.log(content2);

// Iconv 로 utf-8 로 변환하는 객체 생성
var iconv = new Iconv(content2.encoding, "utf-8");
var content3 = iconv.convert(content); // UTF-8 로 변환
var utf8Text = content3.toString('utf-8'); // 버퍼를 문자열로 변환 
console.log(utf8Text);

// UTF-8으로 파일 저장
fs.writeFileSync('test3_utf8.txt', utf8Text, 'utf-8');

Similar Posts

  • Angular의 개요

    Angular에 대한 세부적인 포스팅을 하기 전에 먼저 간단하게 개요를 정리 합니다. Angular란? 구글에서 만든 open-souce web application SPA(Single Page Application) 개발이 가능 다양한 플랫폼에 맞게 개발 가능 유지보수, 개발 속도 향상 (데이터 바인딩, 템플릿 등의 문법 제공 ) 아키텍쳐 Angular의 구성요소 Angular2를 구성하는 요소는 크게 4가지 입니다. 컴포넌트 (Component) 모듈 (Module) 서비스 (Service) 지시자 (Directive) […]

  • Gruntfile의 주요 플러그인들

    앞선 포스팅에서 Grunt 소개와 설치방법를 소개했었습니다. 이번에는 Grunt의 주요 플러그인들을 소개하고 간략한 설명을 포스팅 하겠습니다. 플러그인 Grunt.js에서 말하는 플러그인과 Node.js에서 말하는 패키지는 동일한 것입니다. 그래서 Grunt에서 패키지를 설치하는 방법과 Node.js에서 패키지를 설치하는 방법이 동일합니다. 플러그인 찾기 대부분의 Grunt 플러그인들은 Grunt사이트의 Plugin 메뉴에서 확인할 수 있습니다. 먼저 Grunt웹사이트의 플러그인 메뉴로 이동합니다. 원하는 기능의 플러그인을 검색창을 이용하여 […]

  • 알아두면 편리한 엑셀의 조건부서식 작성하는 방법

    엑셀을 작업할 때 조건부서식이라는 유용한 기능이 있어서 포스팅합니다. 조건부 서식은 말 그대로 셀 안의 내용이 어떤 조건에 해당 하면 그 셀 또는 셀이 속해있는 행 전체에 대해서 서식(스타일)을 자동으로 지정하는 것을 말합니다. 예를 들면 아래의 1번 처럼 완료라는 글자를 썼을 때 해당 행 전체가 회색바탕에 이탤릭체, 취소선이 적용되는 것을 말합니다. 이제 설정하는 방법을 하나하나 말씀드리겠습니다. […]

  • [구글 스프레드시트] 한번에 연속데이터 채우기

    구글 스프레드시트는 MS의 엑셀과 같은 역활을 하는 소프트웨어입니다. MS의 엑셀은 파워풀한 기능과 성능을 가지고 오랬동안 사랑을 받고 있지만 비용을 지불해야하고 컴퓨터에 설치를 해야 사용할 수 있는 반면 구글 스프레드시트는 엑셀보다는 다소 떨어지기는 하지만 적절한 기능과 성능에 무료인데다가 인터넷과 브라우저만 있다면 어디에서든지 사용할 수 있다는 큰 장점을 가지고 있습니다. 또한 다른 사람과의 공유와 협업도 자유로워 상당히 […]

  • 서베일런스스테이션에 다후아 IP카메라(IPC-A35) 등록하는 방법

    예전에 다후아 IP카메라인 IPC-A35를 구매했던 적이 있었습니다. 그때는 어찌어찌 서베일런스스테이션에 붙혀서 사용했었는데 서베일런스를 초기화 하고 다시 연결할때 고생을 많이 해서 설정에 대한 경험을 기록해 보려고 합니다. 먼저 해당 IP카메라를 서베일런스스테이션에 등록하기 전에 IP Address를 먼저 할당해야 합니다. 그러기 위해서는 먼저 유선 LAN을 연결하여 기본 세팅을 해줘야 합니다. 기본 세팅하는 방법은 먼저 포스팅한 아래의 글을 참조하세요. […]

  • 시놀로지 NAS의 Docker로 STRAPI설치하기

    시놀로지 NAS는 개발자에게 축복과도 같은 장비입니다. 일반 사용자처럼 사진의 관리나 파일의 관리를 개인용 클라우드처럼 사용할 수 도 있지만 DSM을 활용한다면 다양한 용도로 사용할 수 있기 때문입니다. 더욱이 Docker을 활용한다면 웬만한 Toy프로젝트나 개발용 프로젝트 정도는 쉽게 구현할 수 있습니다. 이번에 STRAPI라는 오픈소스 프로그램에 흥미가 생겨서 시놀로지의 Docker을 활용하여 설치 해보려고 합니다. STRAPI는 아주 쉽게 Restfull 또는 […]

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다