Mac세상

맥에서 한글이 자소단위로 풀어지는 현상

saltdoll 2012. 4. 2. 13:44
반응형

출처  : 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에서 일부러 자모를 분리해서 만든 파일이름 코드)

 

Hangul Jamo와 Hangul Compatibility Jamo의 차이는 유니코드(한글관련)을 참고하시기 바랍니다.

 

암튼, 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월)

.. 이하 생략 ..

 

 

참고 자료:

NFC와 NFD 서로 변환하기 

'맥오에스는 외롭다' 글중에..: 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 파일명

  • 1) 복잡한 설명을 생략하고 "한글.txt"가 실제로는 "ㅎㅏㄴㄱㅡㄹ.txt"로 풀어써진다고 보면 된다. 자세한 내용은 유니코드 정규화를 참고한다.

출처: 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

풀려진 파일 이름

 

반응형
도움이 되셨다면 하트모양의 "♡ 공감"을 눌러주시면 큰 격려가 됩니다.
(로그인하지 않으셔도 가능)