새로운 강의는 이제 https://memi.dev 에서 진행합니다.
memi가 Vue & Firebase로 직접 만든 새로운 사이트를 소개합니다.

바로가기


npm unorm

1 분 소요

맥의 기묘한 외국어 저장 방식으로 인해 한글 깨짐 현상을 극복해본다.

개요

맥을 쓰다보면 정말 짜증날 때가 한글 관련 문제다

맥을 써본 사람들은 ㅍ ㅏ ㅇ ㅣ ㄹ .txt 이런거 본적 있을 것이다.

파일.txt가 저따위로 나오는 건데

이번에 파일명으로 암호화 키를 만들어야 되는 프로젝트가 있었는데 곤란했기 때문에 기록해본다.

시험

node.js를 이용해 간단한 시험을 해보자.

직접 정의해서 작성한 문자열과 path 모듈로 불러온 파일 이름을 한글자씩 출력해봤다.

import * fs path from 'fs'
const s1 = '파일.txt'
const s2 = // fs 모듈등으로 가져온 문자

// 시험 1: 둘다 똑같이 찍힘
console.log(s1)
console.log(s2)
  
// 시험 2: 'diff' 출력
if (s1 === s2) console.log('same')
else console.log('diff') 

// 시험 3: 맥이 가지고 있는 정보는 한글자임을 확인
for (let i = 0; i < s1.lengh; i++) 
    console.log(s1[i])// 출력: 파, 일, ., t, x, t
 
for (let i = 0; i < s2.lengh; i++) 
    console.log(s1[i])// 출력: ㅍ, ㅏ, ㅇ, ㅣ, ㄹ, ., t, x, t

일반적으로 보이는 데는 지장이 없지만 나처럼 파일명 가지고 뭔가를 하든 혹은 db저장등에 문제가 생길 수도 있다.

방안

조합형을 완성형으로 바꿔야한다. (맞는 말인지는 잘 모르겠지만)

그래서 힘들게 찾은 것이 unorm이라는 모듈..

https://github.com/walling/unorm/blob/master/README.md

설치

yarn add unorm // or
npm i unorm --save   

해결

두어시간을 고생한 게 너무 쉽게 해결 되었다..

import * as unorm from 'unorm'
const os = mac_path
const ns = unorm.nfc(os) 

for (let i = 0; i < ns.length; i++) console.log(ns[i])

unorm.nfd의 경우는 반대일 것 같은데 테스트는 안해봤다 할 이유도 없고…

댓글남기기