출처 : http://namoda.springnote.com/pages/4922363
이유는? - NFD와 NFC
왜 글씨가 운영체제에 따라 달라보이나 파일명의 문자열 코드를 Visual Studio의 디버깅 기능에서 확인해보았습니다
위의 탐색기 그림에서 "스크린샷 "이라는 글씨가 왜 풀어져서 보이는 가를 예로 살펴보면 아래 [그림3]과 같았습니다.
그림3. Visual Studio에서 문자코드 확인(Mac OS X에서 만들어진 풀어진 파일이름 코드)
코드가 1109, 1173, 110F, 1173 등 유니코드에서 한글 자모(Hangul Jamo)에서 해당하는 1100-11FF에 속해 있음을 알 수 있습니다.
다시말하면 Mac OS X에서는 1100-11FF에 해당하는 한글자모를 AC00-D7AF 범위의 한글 음절(Hangul Syllables)로 자동으로 바꾸어 준다는 이야기이지요.
(위와 같은 방식을 NFD(Normalization Form Decomposition) 방식이라고 합니다. Normalization Forms에는 크게 4가지{NFD, NFC, NFKD, NFKC}가 있습니다.)
참고로, 윈도우에서는 한글 자모를 1100-11FF의 영역의 코드를 사용하지 않고 3130-318F 범위의 '한글 호환 자모(Hangul Compatibility Jamo)'를 사용합니다.
동일한 이름으로 보이는 파일이 있는데 대충보았을 때는 같아 보이지만 유니코드 값이 다릅니다.
Mac OS X에서 만들어진 파일, 윈도우에서 자소로 나누어 타이핑 하면 같게 보입니다.
Visual Studio에서 문자코드 확인(Windows에서 일부러 자모를 분리해서 만든 파일이름 코드)
암튼, NFD는 문자를 해석을 할 때 NFD는 풀어서 쓰려는 방향으로 가고, NFC는 합쳐서 나타내려고 하는 형태라고 이해하시면 되겠습니다.
문제는 Mac OS X에서도 생성한 한글 파일이 반드시 NFD의 형태가 아니라는 것이 문제가 있습니다.
제가 사용하고 있는 Snow Leopard에서는 보통은 NFC형태의 파일 이름(묶여져 있는 이름)의 형태로 생기다가 간혹 풀어지는 경우가 생기더군요.
그럼 어떻게 하나? - 프로그램으로 대체~
소량의 파일일 경우에는 수작업으로 하나하나 'ㅎ ㅏㄴㄱㅡ ㄹ'을 '한글'로 바꾸는 것도 해볼 만한 일입니다.
하지만 파일의 수가 많아 질 경우에는 시간도 많이 걸리게 되고 정신 건강에 좋지 않습니다.
그래서 유니코드에 대해 공부도 할 겸 프로그램으로 만들었습니다. v^^;;v
비스타 부터는 NormalizeString() 라는 윈도우 API가 지원이 됩니다만, 저가 XP를 쓰는 바람에 변환용 함수를 직접 만들어야 했습니다.
(Windows XP, Windows Server 2003에서도 Microsoft Internationalized Domain Names (IDN) Mitigation APIs 를 설치하면 가능합니다. 파일: idndlpackage.EXE.jpg)
(UI를 위해 WTL를, 변환 엔진을 위해 C++ STL, 파일 검색을 위해 Windows API를 이용하여 개발했습니다. 아이콘도 적당한게 없어서 손수 제작했습니다.)
그림6. NFx간 변환을 해주는 함수는 아쉽게도 롱혼(0x0600) 이상에서만 되네요. 흑흑~; (이제 Windows 7 사용자가 되었습니다. 2011년 9월)
.. 이하 생략 ..
참고 자료:
'맥오에스는 외롭다' 글중에..: https://kldp.org/node/99646
유니코드 문자열은 서로 달라 붙을 수 있기 때문에 (예를 들어 움라우트 같은 문자들) 서로 다른 문자열이 같은 형태로 나올 수 있습니다. 그래서 비교 편하게 하려고 특정한 형태로 정리를 해 주는데 최대한 풀어 써 주는 것이 NFD고 최대한 묶어 써 주는 것이 NFC입니다. 한글의 경우 "겪"이 NFC로 된 형태고 "ㄱㅕㄲ"(실제로는 코드는 다릅니다만 이렇게 이해하시길)이 NFD로 된 형태인데, 대부분의 운영체제가 파일 이름을 NFC로 처리하지만 맥만 유독 NFD로 처리해서 문제가 생깁니다.
NFC, NFD 관련자료: http://unicode.org/reports/tr15/
NCF와 NFD 서로 변환하기
convmv로 가능 변환이 가능합니다.
1 설치
OS/X 에서는 brew을 이용해서 설치하는 것이 편하다.
$ brew install convmv
Debian/Linux 에서는 아래 명령으로 간단하게 설치할 수 있다.
$ sudo apt-get install convmv
2 사용법
2.1 NFD를 NFC로
대상 파일 시스템이 utf-8를 쓴다고 가정하면
$ convmv -f utf-8 -t utf-8 --nfc -notest 파일명
2.2 NFC를 NFD로
원본 파일 시스템이 utf-8을 쓴다고 가정하면
$ convmv -f utf-8 -t utf-8 --nfd -notest 파일명
출처: https://markboy95.blogspot.com/2012/03/nfc-nfd_21.html
맥에서 한글 자소단위 분리를 해결하는 방법 (파일명/텍스트) (Update:20141203)
https://m.blog.naver.com/kiros33/220180268301
맥에서 SVN 한글 깨지는 현상 Homebrew 로 패키지로 문제 해결하기 - OSX에서 SVN사용하기
https://starmethod.tistory.com/1293
Node.js 를 사용한 유니코드 NFD 를 NFC 로 변환하는 방법
https://m.blog.naver.com/kiros33/220671385630
'Mac세상' 카테고리의 다른 글
[mac]Micirosoft Remote Desktopo for Mac (0) | 2012.04.30 |
---|---|
[mac]한글 입력기 - 바람(shift+space) (0) | 2012.04.30 |
[Mac]wget과 같은 curl 프로그램 (0) | 2012.04.13 |
[맥]FStream 라디오 방송청취 (0) | 2012.04.03 |
[Mac] 맥용 mp3플레이어 Vox (1) | 2012.03.28 |
[Mac]Dash Board에 네이버 사전 widget 사용하기 (0) | 2012.03.22 |
MAC시스템 PRAM 리셋, SMC리셋 (0) | 2012.03.14 |
아이튠즈 eBook & App등록하기 (0) | 2012.02.10 |
(로그인하지 않으셔도 가능)