한글자모분리 현상

Posted by

screenshot

mastodon을 사용하다보니 유독 제 툿만 한글이 자모가 분리되어서 나타나는 경우를 발견했습니다. commandline에서 작성하면 안 그런데 [^commandline] alfred를 통해서 툿을 날리면 유독 이런 경우가 발생하더군요.

[^commandline]: 이건 macOS의 파일 시스템이 10.13부터 HFS+ 가 아닌 APFS 로 바뀐 것과 연관이 있어보입니다. (참조)

사실 mastodon 만이 아니라 iOS 폰트를 변경한 이후부터 몇몇 앱에서도 글자 자모가 분리돼서 나타나는 현상을 발견해서 이리저리 구글링을 해보았습니다.

알고보니 생각보다 연원이 깊은 문제였는데 유니코드를 보여줄 때 macOS에서는 NFD(Normalization Form Decomposition) 방식으로 보여주는 반면 Windows에서는 NFC(Normalization Form Composition) 방식으로 보여주는 것이 문제라고 하더군요.

풀어 쓰자면 macOS에서 한글을 입력하면 ㅎㅏㄴㄱㅡㄹ처럼 저장하고 보여줄 때 한글로 묶어서 보여주는 반면 Windows에서는 한글이라는 완성형 조합으로 저장하고 보여주는 것이 차이점이라고 하더군요.

한글만이 아니라 라틴 문자 기반의 언어에서도 문제가 될 수 있는 부분인데 대표적으로 é를 쓸 때 하나의 문자인 é를 쓰는 방식과 e와 ´[^1]를 조합해서 쓰는 방식으로 나뉜다고 합니다. 다만 한글처럼 눈에 띄는 문제가 아닐 뿐이구요.

[^1]: unicode character ‘ACUTE ACCENT’(U+00B4)

자세한 내용은 파일명의 한글자모가 분해되어 보여지는 현상 (Unicode NFD) 글에서 확인할 수 있습니다.

그래서 해결법은?

시스템 레벨에서 NFC와 NFD를 사용하도록 강제할 수 있는 방법은 사실상 없습니다. 하지만 내보내는 텍스트를 NFD에서 NFC로 변환할 수는 있죠.

1
2
3
4
import unicodedata

q = u"{query}"
q = unicodedata.normalize('NFC',q)

via