맥에서 보낸 한글 파일명이 윈도우에서 깨지는 이유 — NFC와 NFD

「한글」이 「ㅎㅏㄴㄱㅡㄹ」로 흩어져 보이는 것은 파일이 망가져서가 아니라 한글을 적는 방식이 두 가지이기 때문입니다. 유니코드 정규화(NFC·NFD)를 그림처럼 풀어 설명합니다.

고친 날: 2026-10-26

맥에서 만든 「한글 보고서.docx」를 윈도우 PC로 보냈더니 받은 쪽 탐색기에 ㅎㅏㄴㄱㅡㄹ ㅂㅗㄱㅗㅅㅓ.docx 라고 보인다면, 파일은 멀쩡합니다. 열면 내용도 그대로입니다. 바뀐 것은 이름을 적은 방식 하나뿐이고, 그 방식만 맞춰 주면 원래 이름으로 돌아옵니다.

한글 한 글자를 적는 두 가지 방법

컴퓨터는 글자를 번호(유니코드 코드 포인트)로 저장합니다. 그런데 한글 음절은 번호를 매기는 방법이 둘입니다.

두 방법은 유니코드 표준에서 같은 글자로 취급합니다(정준 등가). 그래서 둘 중 하나로 통일하는 규칙이 있는데, 이것이 정규화(normalization)입니다.

정규화 형식「한」을 적는 방식UTF-8 바이트
NFC (조합)U+D55C 한 개ED 95 9C (3바이트)
NFD (분해)U+1112 U+1161 U+11ABE1 84 92 E1 85 A1 E1 86 AB (9바이트)

같은 「한」인데 저장되는 바이트는 전혀 다릅니다. 파일 이름이 NFD 로 적히면 한글 한 글자가 세 배 길어지고, NFC 를 기대하는 프로그램은 이 조각을 따로따로 읽습니다.

맥과 윈도우는 서로 다른 쪽을 씁니다

파일을 메일·메신저·USB·클라우드로 옮길 때 이름은 대개 바이트 그대로 따라갑니다. 맥의 NFD 이름이 그대로 윈도우에 도착하는 것입니다.

왜 낱자로 흩어져 보이나

유니코드 규칙대로라면 ㅎ+ㅏ+ㄴ 조각도 화면에서는 「한」 한 글자로 모아 그려야 합니다. 맥은 그렇게 그려서 사용자는 차이를 알 수 없습니다. 그런데 윈도우 탐색기와 맑은 고딕 같은 기본 글꼴 조합은 이 조각을 모아 그리지 못하고 낱자를 나란히 그립니다. 그래서 「ㅎㅏㄴㄱㅡㄹ」처럼 보입니다.

눈에 보이는 것만 문제가 아닙니다.

깨진 게 아니라서 되돌릴 수 있습니다

NFD → NFC 변환은 유니코드가 정한 규칙이라 정보 손실이 없습니다. ㅎ+ㅏ+ㄴ 은 언제나 「한」으로 돌아갑니다. 프로그래밍 언어에도 기본 기능으로 들어 있습니다 — 자바스크립트의 normalize('NFC'), .NET·PowerShell 의 String.Normalize(), 파이썬의 unicodedata.normalize('NFC', ...) 가 모두 같은 일을 합니다.

한글 파일명 복구 의 「파일·폴더」 탭이 이 변환을 합니다. 파일을 끌어다 놓으면 「윈도우에서 보이던 이름」과 「고친 이름」을 나란히 보여 주고, 하나씩 또는 ZIP 으로 받을 수 있습니다.

다른 글자도 같은 일이 생깁니다

분해·조합은 한글만의 일이 아닙니다.

이 도구는 한글뿐 아니라 이런 글자도 함께 NFC 로 바꿉니다.

압축 파일이면 사정이 하나 더 있습니다

맥에서 ZIP 으로 묶어 보내면 「ㅎㅏㄴㄱㅡㄹ」이 아니라 蹂닿퀬 나 꼪뀳 같은 엉뚱한 글자가 나오기도 합니다. 이것은 NFD 문제에 「글자표(인코딩)」 문제가 겹친 경우입니다. 맥에서 압축한 ZIP 이 윈도우에서 깨지는 이유 에서 따로 설명합니다.

정리

도구 열기