screenshot

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

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

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

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

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

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

그래서 해결법은?

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

import unicodedata

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

via

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

  2. unicode character ‘ACUTE ACCENT’(U+00B4)