최근 바탕화면이 너무 복잡하여 정리할겸 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");
결과물을 열어보니 성공적으로 변환되어 있다.
댓글