동료가 맥에서 압축해 보낸 자료를 윈도우에서 풀었더니, 파일 이름의 자음과 모음이 ㅂㅗㄱㅗㅅㅓ.txt처럼 하나씩 떨어져 보인 적이 있으실 겁니다. 파일을 열면 내용은 멀쩡한데 이름만 이상합니다.
같은 폴더에 이름이 똑같아 보이는 파일이 두 개 생기기도 합니다. 하나를 지우면 다른 하나가 남고, 검색창에 이름을 쳐도 안 잡힙니다. 왜 이런 일이 생기는지 바이트를 직접 꺼내 확인했습니다.
이름이 깨진 게 아니라 쪼개져 있습니다
한글 한 글자를 컴퓨터에 담는 방법은 두 가지입니다. 하나는 완성된 글자 그대로 담는 방식이고, 다른 하나는 초성, 중성, 종성을 따로 담아 두었다가 화면에 그릴 때 합쳐 보여 주는 방식입니다. 앞의 것을 NFC, 뒤의 것을 NFD라고 부릅니다.
'한' 한 글자를 두 방식으로 각각 저장해 코드와 바이트를 꺼내 봤습니다. 측정 환경은 윈도우 11, 파이썬 3.12.10 표준 라이브러리입니다.

같은 '한'인데 NFC는 한 글자에 3바이트, NFD는 세 글자에 9바이트입니다. 사람 눈에는 둘 다 '한'으로 보이지만 컴퓨터에는 전혀 다른 값입니다. 파이썬으로 두 문자열을 비교하면 False가 나옵니다.
이름이 길어질수록 차이도 벌어집니다. 실제 파일 이름으로 재 봤습니다.
| 파일 이름 | NFC | NFD | 차이 |
|---|---|---|---|
| 보고서.txt | 7글자 13바이트 | 10글자 22바이트 | +9바이트 |
| 회의록 최종.hwp | 10글자 20바이트 | 17글자 41바이트 | +21바이트 |
| 2026년 예산안.xlsx | 14글자 22바이트 | 21글자 43바이트 | +21바이트 |
맥이 파일 이름을 NFD 형태로 다루는 것은 오래전부터 알려진 동작입니다. 윈도우는 NFC를 씁니다. 그래서 맥에서 만든 압축 파일이 윈도우로 건너오면 이름의 형태가 그대로 따라옵니다. 글자가 깨진 것이 아니라, 쪼개 담은 형태가 그대로 보이는 것입니다.
이름이 같아 보이는 파일이 두 개 생기는 이유
여기서 성가신 일이 벌어집니다. 두 형태를 같은 ZIP에 각각 넣고 폴더에 풀어 봤습니다.
목록 항목 수: 2개
1. 화면 표시 "보고서.txt" 실제 13바이트 내용 "NFC로 저장한 내용"
2. 화면 표시 "보고서.txt" 실제 22바이트 내용 "NFD로 저장한 내용"
풀린 파일 2개
"보고서.txt" 22바이트
"보고서.txt" 13바이트
압축 목록에서도 2개, 실제로 풀린 파일도 2개입니다. 화면에 보이는 이름은 글자 하나까지 같습니다. 덮어쓰기를 물어보지도 않습니다. 컴퓨터 입장에서는 서로 다른 이름이니 당연한 결과입니다.
검색이 안 되는 것도 같은 이유입니다. 검색창에 키보드로 친 '보고서'는 NFC로 만들어지는데, 파일 이름은 NFD로 저장돼 있으니 서로 맞지 않습니다. 정렬 순서가 뒤죽박죽으로 보이는 것도 마찬가지입니다.
이름을 읽는 규칙이 달라 이상하게 보인다는 점에서는 압축을 풀었더니 파일 이름이 ║╕░φ 처럼 깨지는 경우와 비슷해 보이지만, 원인이 다릅니다. 그쪽은 CP949로 저장한 이름을 UTF-8로 읽어서 다른 글자가 되어 버린 경우이고, 이 글은 같은 글자를 쪼개 담은 경우입니다. 그래서 해결 방법도 다릅니다.
내 파일이 어느 쪽인지 확인하고 고치기
파일 이름이 어느 형태인지는 눈으로 구분할 수 없습니다. 글자 수를 세어 보면 바로 드러납니다. NFC라면 '보고서'가 3글자, NFD라면 7글자로 잡힙니다.
아래 코드는 폴더 안 파일 이름을 하나씩 확인하고 NFC로 정리합니다. 파이썬이 깔려 있다면 그대로 돌려 보시면 됩니다.
import os, unicodedata
folder = r"C:\받은자료"
for name in os.listdir(folder):
fixed = unicodedata.normalize("NFC", name)
if name == fixed:
continue
print(f"{len(name)}글자 -> {len(fixed)}글자 : {fixed}")
os.rename(os.path.join(folder, name), os.path.join(folder, fixed))
이름이 이미 NFC면 건너뛰고, 쪼개져 있는 것만 합쳐서 바꿔 놓습니다. 바꾸기 전에 무엇이 바뀔지 먼저 보고 싶다면 마지막 os.rename 줄을 잠시 지우고 돌리면 출력만 나옵니다.
파이썬을 쓰지 않는다면 방법이 하나 더 있습니다. 이름이 이상한 파일을 골라 F2를 누르고 이름을 직접 다시 타이핑하는 것입니다. 키보드로 친 글자는 NFC로 들어가므로 그 자리에서 정리됩니다. 파일 수가 적다면 이쪽이 빠릅니다.
보내는 쪽에서 막고 싶다면, 맥에서 기본 압축 대신 이름을 NFC로 저장해 주는 압축 도구를 쓰거나, 파일을 폴더째 압축하지 말고 클라우드 드라이브에 올려 공유하는 방법이 있습니다. 다만 어떤 도구가 어떻게 저장하는지는 버전에 따라 다를 수 있어, 받는 쪽에서 한 번 정리하는 편이 확실합니다.
눈에 보이지 않는 바이트가 파일을 갈라놓는다는 점에서는 같은 표를 저장했는데 파일 크기가 달라지는 문제와 성격이 같습니다. 그쪽은 줄 끝에 숨은 1바이트가, 이쪽은 글자를 담는 방식이 갈랐을 뿐입니다.
이름이 똑같아 보이는 파일이 두 개 생겼다면, 지우기 전에 글자 수부터 세어 보세요. 중복이 아니라 형태가 다른 두 파일일 수 있습니다.
'파일 형식 백과사전' 카테고리의 다른 글
| DAT 파일이란? 삭제해도 되는 파일일까? (0) | 2026.09.10 |
|---|---|
| 중복 제거를 눌렀는데 중복이 그대로 남아 있는 이유 (0) | 2026.09.08 |
| PDF에서 검은 칠로 가린 글자, 복사하면 그대로 나옵니다 (0) | 2026.09.07 |
| 한 장짜리 한글 문서를 PDF로 저장했더니 45KB, 용량의 71%는 폰트였습니다 (0) | 2026.09.06 |
| 같은 표를 저장했는데 파일 크기가 다릅니다, 줄 끝에 숨은 1바이트 (0) | 2026.09.05 |