본문 바로가기

study

[node.js] txt 파일 UTF-8 EUC-KR 인코딩 디코딩 방법

반응형

 

EUC-KR 로 인코딩 되어있는 txt 파일을 node.js로 불러 읽으려니 한글이 깨져 나온다. 

인코딩을 위해 순수 자바스크립트로 만들어져 빠르다는 iconv-lite 패키지를 설치해보기

 

1. iconv-lite 설치

npm install iconv-lite

 

 

 

2. iconv-lite /  fs 가져오기

import fs from 'fs';
import iconv from 'iconv-lite';

 

 

 

3. 사용하기 

* iconv-lite 패키지의 특징은 'UTF-8'을 기준으로 한다는 것 ! 

  const file = '/Users/Documents/address_data/match_build_seoul.txt';
  // EUC-KR로 된 txt파일 읽은 데이터 content에 담기	
  const content = fs.readFileSync(file); 

  // EUC-KR -> UTF-8 로 디코딩하기 
  const utf8Str = iconv.decode(content, 'euc-kr');
  console.log('utf8=', utf8Str); -> 이제 한글이 깨지지않고 잘 뜸 
  // UTF-8 txt 로 저장하기
  fs.writeFileSync('ut8-data.txt', utf8Str, { encoding: 'utf8' });

  // UTF-8 -> EUC-KR 로 인코딩하기 
  const eucKrStr = iconv.encode(utf8Str, 'euc-kr');
  // EUC-KR txt 로 저장하기
  fs.writeFileSync('euc-kr-data.txt', content, { encoding: 'binary' })

 

 

나는 EUC-KR -> UTF-8 로 변환이 필요하니 아래 코드로만 가져와서 읽어주기 

  const file = '/Users/Documents/address_data/match_build_seoul.txt';
  const content = fs.readFileSync(file);

  // UTF-8 txt 로 저장하기
  const decodedToUtf8Content = iconv.decode(content, 'euc-kr');
  const fileStream = fs.createReadStream(decodedToUtf8Content);

  const rl = readline.createInterface({
    input: fileStream,
    crlfDelay: Infinity,
  });

  for await (const line of rl) {
    console.log(`Line from file: ${line}`);
  }

 

crlfDelay : Infinity  =====> txt 파일 안의 \r \n을 한줄씩 break하기위한 옵션 

 

=> 이렇게 하려고 했는데 ERROR 

 

!! Error: ENAMETOOLONG: name too long, open 'txt 파일 내용'

 

decodedToUtf8Content에 utf-8로 디코딩되어 들어간 내용 전체가 파일명이 되어서 파일명이 너무 길다고 나왔다 

decodedToUtf8Content를 파일명을 정해 Txt 파일로 저장 후 다시 해당 파일을 불러와서 사용하기 

 

  const file = '/Users/Documents/address_data/test.txt';
  const content = fs.readFileSync(file);

  // UTF-8 txt 로 저장하기
  const decodedToUtf8Content = iconv.decode(content, 'euc-kr');
  fs.writeFileSync(
    '/Users/Documents/address_data/decodedData.txt',
    decodedToUtf8Content,
    { encoding: 'utf8' },
  );
  // const fileStream = fs.createReadStream(decodedToUtf8Content);

  try {
    // 방법 1
    const allFileContents = fs.readFileSync(
      '/Users/Documents/address_data/decodedData.txt',
      'utf-8',
    );
    console.log('allFileContents=', allFileContents);
    .
    .
    .

 

불러와졋다 휴

 

 

 

 

Reference : https://gyuha.tistory.com/522

반응형