macOS: Unicode 문제. (한글 자모 풀어쓰기되는 현상)

Double Commander 를 사용하여 소니 음악 재생기에 재생목록을 만드는 스크립트를 사용 중이다. 리눅스에선 아무 문제없이 몇년 째 써오고 있었는데, 이걸 macOS 용으로 변환하면서, 몇가지 을 했었다.

그 삽질이 오늘 마무리될 예정이었는데, 예상 밖의 암초를 만났다.
영어로 된 경로(Path, Filename 모두)는 이상이 없는데, 한글이 섞이면 소니 플레이어에서 인식을 하지 못했다. 물론 리눅스에서 작성하면 아무 문제가 없었다.

파일명과 경로에는 아무런 문제가 없다. 인코딩 문제인가 하고 EUC-KR, UTF16 등으로 바꿔봤지만 문제는 동일했다. (지금와 생각하면, 이게 좀 이상하다. EUC-KR 로 갔다가 다시 UTF8 로 변환했을 때 해결이 됐었어야 하지 않나..?)

이런 저런 삽질과 시간 소모 끝에 문제를 발견했고, 해결할 수 있었다.


그에 앞서, 다음과 같은 실험을 해본다.

  • macOS Finder 에서, 새 폴더를 생성한다.
  • 새 폴더는 ‘무제 폴더’라고 생기는데, 이 폴더명을 그대로 복사한 뒤, VS Code 를 열고 붙여넣기 한다.
  • Find 명령으로, ‘무제’ 를 검색해본다.
검색이 안돼?

첫행의 ‘무제 폴더’는 복사/붙여넣기 했고, 둘째행의 ‘무제’는 직접 입력했다.
화면에서 보는 바와 같이, ‘무제’를 검색했는데, 아래행의 무제만 찾아졌다.
또, 약간 묘한 점이 있는데, 첫행의 맨 앞에서부터 커서를 오른쪽 화살표키를 눌러서 오른쪽으로 움직이면, 한번 키입력에 한음절씩 이동되는 게 아니고, 두번 입력을 해야 한음절씩 이동이 된다.
게다가, 첫행 ‘무’ 오른쪽에 커서를 놓고 Backspace 로 한글자를 지우면, ‘무’가 지워지는게 아니고 ‘ㅜ’가 삭제되고 ‘ㅁ’은 남는다.

안드로이드 SwiftKeyboard 가 이런 방식이긴 한데..


처음엔 이게 D.C 의 문제라고 생각했다. 당연히 만만한 놈(?)을 의심했던 거다. 그러나, 이런 저런 시행착오 끝에, 이게 OS 자체 문제라는 걸 알아낼 수 있었다.

macOS 는 Unicode NFD 라는 방식을, 그외 OS 들은 NFC 라는 방식을 사용한다고 한다. 그런데.. 한 문서 안에 두가지 방식이 혼재할 수도 있나?? VS Code 에선 현재 그런 상황이다. 터미널을 열고 Vim 으로 실험해봐도 VS Code 와 같은 현상이다.
다만, macOS 에서 기본 제공하는 ‘텍스트 편집기’에선 이런 현상이 나타나진 않는다.

이 문제로 인해, Wine 에서 자모가 분리되는 현상이 왜 일어나는 지도 알아낼 수 있었다. 원인은 알아냈다. 다만, 늘 그렇듯 이 부분에서도 해결은 내 몫이 아니다.
돌아가기만이 있을 뿐.

실험은 안해봤지만, gist.github 에 있는 글로 짐작해보건대, 디렉토리 전체를 수정할 수도 있는 모양이다. convmv 라는 프로그램인데, 이건 macOS 에는 기본 제공되진 않는다. Homebrew 를 통해 설치할 수 있다.
당장은 저것까진 필요하진 않을 듯…?

내 스크립트에선 iconv 로 해결하는 방법을 찾았다.
D.C 에서 넘겨받은 $1 과 $2 를, iconv 로 수정한 뒤, 이후엔 수정한 문자열로 작업하게끔 했다.
사용법은 이런 식이다.

Param1=$(echo "$1" | iconv -f utf-8-mac -t utf8)
Param2=$(echo "$2" | iconv -f utf-8-mac -t utf8)

-f 는 from 을, -t 는 to 를 의미한다.

문제 해결. 인지에서 해결까지 약 3시간..
이 정도면 준수하다고 할 수 있으려나?


원래 macOS 를 이렇게까지 복잡하게 생각하며 사용할 생각은 아니었다. 그저 음악 프로그램이나 조금 사용하려하던게, 기본으로 쓰는 프로그램들을 리눅스와 동일하게 쓰자는 데까지 발전했고, 그 결과가 지금 이 상황까지 왔다.

이 문제로만 보면, 맥은 리눅스보다 훨씬 까다롭다. 얼핏 찾아보니, 저 문제때문에 MS 윈도우와 공동 작업을 할 때 여러 문제가 생기는 모양이다. 리눅스는 적어도 그런 문제는 없는데..

아무튼, 알면 알수록 정이 가지 않는 OS 라고나 할까.

안녕하세요. 글 남겨주셔서 고맙습니다.