Node.js를 통해서 CSV 파일을 만들고 나서 Excel로 열었을 때 한글이 깨지는 현상이 있습니다.
인터넷에서 흔하게 나오는 해결법은 CSV 파일을 메모장으로 열고 ANSI 확장자로 다시 저장하라고 되어있는데, 이 방법은 프로그래밍적인 방법이 아니라 따를 수 없습니다.
그래서 코드로 해결할 수 있는 방법을 공유합니다. 매우 간단합니다.
보통 다음과 같이 이차원 배열을 문자열로 만들어 CSV 파일로 보내실 겁니다.
const fs = require('fs');
const arr = [['name', 'age'], ['zerocho','27'], ['nero', '32']];
const data = arr.map((row) => row.join(',')).join('\n');
fs.writeFileSync('result.csv', data);
이렇게 만들면 한글이 깨집니다. UTF-8이더라도요.
해결 방법은 문자열 데이터 앞에 \uFEFF를 붙여주는 것입니다.
const fs = require('fs');
const arr = [['name', 'age'], ['zerocho','27'], ['nero', '32']];
const data = arr.map((row) => row.join(',')).join('\n');
fs.writeFileSync('result.csv', '\uFEFF' + data);
BOM markers를 붙여주는 방법인데요. 문제는 BOM이 필요없는 곳에서는(대부분의 경우 그렇습니다) \uFEFF 문자열이 오히려 방해가 될 수 있습니다.
CSV를 윈도에서 Excel로 열 때만 해당 문자열을 추가해주세요.