본문 바로가기
프로그래밍 일지/nodeJS

fs의 writeFile을 이용해서 utf16le파일을 만들어보자.

by Mudi Data 2022. 1. 3.

최근 바탕화면이 너무 복잡하여 정리할겸 rainmeter로 skin을 제작중에 있었다. rainmeter가 다 좋지만 변수를 유동적으로 생성하여 다룰 수 없는 점 등 여러 불편한점이 있다.
 편의를 위해 @include문을 사용해 파일을 분산시켰고.. 중복되는 여러파일의 패턴을 nodejs로 생성하려고 시도하였다.
rainmeter에서 지원하는 방식이 utf16le 였는데... fs 모듈의 writeFile이 이 방식을 지원한다는 글을 보고 실행에 옮기게 되었다.

fs.writeFileSync(`./modules/icon${i}.inc`, result, "utf16le");

위와 같은 코드를 작성하여 생성된 파일을 확인하여보니 글자가 다 깨져있는 것이다. 메모장으로 열어 해당 파일의 인코딩옵션을 보니 ANSI로 되어있다.

뭐가 문제일까 오랜시간을 서핑하던중 아래 깃허브를 발견하였다.

https://gist.github.com/zoellner/4af04a5a8b51f04ad653e26d3b7181ec

 

write utf-16 encoded files in node.js (both utf16be and utf16le)

write utf-16 encoded files in node.js (both utf16be and utf16le) - utf16test.js

gist.github.com

 

내가 겪었던 문제의 핵심은 문자열에 BOM이 없었기 때문이란다.......... 후............

위 링크에 간단한 해결책도 있다. 그냥 문자열 제일 앞에 " \ufeff " 만 추가하면 된다.

var str = "\ufeff 문자열......"
fs.writeFileSync(`./modules/icon${i}.inc`, result, "utf16le");

결과물을 열어보니 성공적으로 변환되어 있다.

댓글