Node.js에서 csv 파일 다루기 및 ios-윈도우 간 한글 깨짐 문제 해결

2024. 1. 6. 18:11·개발이야기

엑셀 또는 스프레드시트 파일을 Node.js 환경에서 다루고자 할 때, csv 파일을 사용합니다. Csv 파일은 여러 필드가 쉼표와 줄바꿈으로 표현된, 간단한 파일이므로, fs 모듈을 이용하여 쉽게 읽고쓰기 구현이 가능합니다. 하지만, 저는 아래의 라이브러리의 도움을 자주 받는 편입니다.

 

https://csv.js.org/

 

CSV Project - Node.js CSV package

This is a full-featured CSV parsing tool running entirely on your browser. No data leave your computer ! Use it also to learn how to use our packages and to test the various options interactively.

csv.js.org

 

위 라이브러리를 이용하면, Node.js 환경에서 엑셀 파일을 편리하게 다룰 수 있습니다. 확장자가 .xlsx 가 아님에 주의해야합니다. 엑셀에서 다른 이름으로 저장 하여 .csv 로 저장을 하거나, .xlsx 를 .csv로 변환하는 과정을 거쳐야합니다.

 

종종, ios(맥) 환경에서 이렇게 생성한 csv 파일을 윈도우에서 열었을 때, 한글이 깨지는 현상이 발생할 수 있습니다. 인코딩 방식의 차이 때문입니다. 맥에서는 csv 파일의 기본 인코딩이 utf8 방식인 반면, 윈도우에서는 ANSI 방식이기 때문입니다. 고로, 이를 해결하는 방법은 두가지가 있습니다.

  1. 맥에서 csv 파일을 작성할 때, ANSI 방식을 사용하기
  2. 윈도우에서 csv 파일을 열 때, utf8 방식을 사용하기

보통 2의 방식을 주로 사용합니다. csv 파일을 활용하고자 하는 윈도우 PC에서 기본 csv 파일 인코딩 설정을 바꿀수도 있지만, csv 파일 자체에 이 파일은 "utf8 방식으로 여세요." 하고 명시하는 방식이 좋습니다. BOM 문자열을 이용하면 됩니다.

 

BOM(Byte Order Mar) 문자열은 파일의 가장 앞머리에 있는 문자열이며, (생략도 가능합니다) 인코딩 방식에 따라 여러가지 값으로 표현됩니다. 우리는 이 파일이 utf 방식으로 읽힐 수 있도록, \xef\xbb\xbf 혹은 \uFEFF 을 파일 말머리에 달아주면 됩니다.

 

위에 처음 소개드린 csv 라이브러리에서는 bom 옵션을 제공하고 있으니, 편리하게 이용하기만 하면 됩니다. 직접 csv 파일을 생성하는 코드를 짠다면, 아래처럼 구현해주면 됩니다. Node.js 가 아니라, 브라우저 환경에서도 정상 동작하는 코드입니다.

const rows = [{ name: '준성', point: 1 }, { name: '민수', point: 2 }];

const BOM = "\uFEFF";
let csvContent = "data:text/csv;charset=utf-8," + BOM;

csvContent += ['이름', '점수'].join(',') + '\n';
csvContent += rows.map(row => [row.name, row.point].join(',')).join('\n');

// 브라우저 환경에서 엑셀 다운로드 용으로 사용가능
console.log(encodeURI(csvContent));
반응형
저작자표시 (새창열림)

'개발이야기' 카테고리의 다른 글

속터지는 Google Play Console 본인인증하기  (3) 2025.02.06
Cursor AI 사용 후기 - 위기의 내 밥그릇  (0) 2025.01.12
타입스크립트: ts2322 error 해결을 위한 서브타입 관련 개념 총정리  (1) 2023.11.26
한글의 유니코드 인코딩과, javascript에서 한글 문자열을 다루는 방식  (1) 2023.10.19
HTTP의 역사: 0.9부터 3.0까지  (1) 2023.09.14
'개발이야기' 카테고리의 다른 글
  • 속터지는 Google Play Console 본인인증하기
  • Cursor AI 사용 후기 - 위기의 내 밥그릇
  • 타입스크립트: ts2322 error 해결을 위한 서브타입 관련 개념 총정리
  • 한글의 유니코드 인코딩과, javascript에서 한글 문자열을 다루는 방식
준별
준별
  • 준별
    준별개발
    준별
  • 전체
    오늘
    어제
    • 분류 전체보기 (44)
      • 개발이야기 (12)
        • 토막글 (9)
      • 일상이야기 (5)
      • 개인 공부 (16)
      • 생각과 기록 (2)
  • 블로그 메뉴

    • 홈
    • 방명록
    • Github
    • Linkedin
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    http1.0
    http pipelining
    터미널세팅
    바이브코딩
    데이터베이스
    맥북세팅
    Zsh
    http1.1
    맥북
    실전압축
    http3.0
    persistent connection
    artillery
    맥북터미널세팅
    터미널꾸미기
    필수툴
    조합형
    데스크셋업
    nodejs
    전산기조직
    이산구조
    클램쉘
    정보보호개론
    powerlevel10k
    http2.0
    nestjs
    zsh세팅
    맥북초기세팅
    zsh-autosuggestion
    k9s
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.5
준별
Node.js에서 csv 파일 다루기 및 ios-윈도우 간 한글 깨짐 문제 해결
상단으로

티스토리툴바