압축을 풀었더니 파일명이 깨져 나올 때 (한글 이름 깨짐)
증상
압축 파일을 푸는 순간 파일 이름이 알아볼 수 없는 문자로 바뀝니다.
- 한글 이름이
ÆÄÀϸí·���·?????같은 모양으로 나옴 - 폴더 이름까지 깨져서 어느 폴더가 무엇인지 알 수 없음
- 파일은 정상적으로 열리는데 이름만 깨짐
- 다른 사람은 멀쩡히 받았다는데 내 PC에서만 깨짐(또는 그 반대)
- 맥에서 압축한 파일을 윈도우에서 풀 때, 또는 그 반대일 때 자주 발생
내용은 멀쩡하고 이름만 깨진다면 파일이 손상된 것이 아닙니다. 파일명을 어떤 방식으로 저장했는지가 서로 맞지 않아서 생기는 일입니다.
왜 생기나 — ZIP은 원래 한글을 몰랐습니다
ZIP 포맷은 1980년대에 만들어졌고, 다국어를 담는 유니코드와 UTF-8은 1990년대가 지나서 개발됐습니다. 그래서 초기 ZIP 포맷에는 UTF-8이라는 개념 자체가 없었습니다.[1]
이후 ZIP이 표준처럼 쓰이면서 유니코드를 담을 방법이 여럿 만들어졌는데, 방식이 하나로 통일되지 않았습니다. 반디집 설명 기준으로 현재 쓰이는 방식은 크게 두 가지입니다.[1]
| 저장 방식 | 내용 | 호환성 |
|---|---|---|
| 파일명 자체를 UTF-8로 저장 | ZIP 표준 문서(APPNOTE)에 정의된 방식 | 일부 압축 프로그램이 이를 제대로 인식하지 못해 오히려 깨져 보이는 경우가 있음[1] |
| MBCS로 저장 + 확장 필드에 UTF-8 추가 | 파일명은 기존 방식으로 두고, 별도 칸에 UTF-8 이름을 함께 저장(Info-ZIP Unicode Path Extra Field) | 파일 크기가 수십 바이트 커지지만 호환성은 더 좋은 편. 7-Zip·WinRAR·WinZip이 이 필드를 지원[1] |
정리하면, 압축한 쪽이 쓴 방식과 푸는 쪽 프로그램이 이해하는 방식이 어긋나면 이름이 깨집니다. 어느 한쪽 프로그램이 잘못된 것이 아닙니다.[1]
이미 받은 파일을 살리는 방법
받은 파일은 이미 압축이 끝난 상태라 저장 방식을 바꿀 수 없습니다. 대신 푸는 쪽에서 코드페이지(문자 인코딩)를 바꿔 읽는 방법을 씁니다.
- 압축 파일을 바로 풀지 말고 압축 프로그램으로 열어 목록만 봅니다. 이 단계에서 이름이 깨져 보이는지 확인합니다.
- 압축 프로그램의 코드페이지(인코딩) 변경 기능으로 다른 인코딩을 골라 봅니다. 한국어 파일이면 한국어(EUC-KR/CP949)와 UTF-8을 번갈아 시도합니다.
- 목록에서 이름이 정상으로 보이는 인코딩을 찾은 뒤 그 상태에서 압축을 풉니다.
- 인코딩을 바꿔도 안 되면 다른 압축 프로그램으로 열어 봅니다. 위 표처럼 프로그램마다 지원하는 방식이 달라, 한 프로그램에서 깨지던 것이 다른 프로그램에서는 정상으로 보이는 경우가 있습니다.[1]
자동 인식 기능에 기대기 어려운 이유도 알아 둘 만합니다. 반디집 설명에 따르면 코드페이지 자동 인식은 주어진 문자열을 가지고 추정하는 방식이라 100% 정확성을 보장하지 못하며, 특히 포함된 문자열이 적거나 비슷한 문자열이 나열된 경우 오작동하는 경우가 종종 있습니다.[2] 파일이 몇 개 없는 압축 파일에서 자동 인식이 자주 틀리는 것이 이 때문입니다.
보낼 때 안 깨지게 압축하는 법
받는 쪽이 어떤 환경인지 모른다면 다음 기준으로 고릅니다.
| 받는 쪽 | 권장 | 이유 |
|---|---|---|
| 윈도우 사용자(국내) | 확장 필드에 UTF-8을 함께 저장하는 방식 | 파일명은 기존 방식으로 저장돼 옛 프로그램에서도 읽히고, 지원하는 프로그램에서는 정확한 이름이 나옴[1] |
| 맥·리눅스 사용자 | TAR/TGZ로 압축하면서 UTF-8 파일명 저장 | Unix 계열은 UTF-8 파일명을 쓰므로 한글이 있어도 정상적으로 풀림. 단 일부 윈도우 프로그램이 TAR/TGZ의 UTF-8을 인식하지 못할 수 있음[1] |
| 다른 언어권 | 확장 필드 방식 | 한국어 윈도우에서 압축한 파일을 일본어 윈도우에서 열어도 이름이 깨지지 않는 사례가 개발사 문서에 예시로 실려 있음[1] |
가장 확실한 회피책은 파일명을 영문과 숫자로 바꿔 압축하는 것입니다. 한글이 아예 없으면 어떤 방식으로 저장하든 깨질 일이 없습니다. 중요한 자료를 여러 사람에게 배포한다면 이 방법이 가장 안전합니다.
주의할 점
- 깨진 이름 그대로 풀어 두면 나중에 되살리기 어렵습니다. 압축을 푸는 순간 그 이름으로 디스크에 저장되므로, 원본 압축 파일을 지우지 말고 인코딩을 바꿔 다시 푸는 편이 낫습니다.
- 이름이 깨졌다고 파일이 손상된 것은 아닙니다. 대부분 내용은 정상이므로 확장자를 확인해 열어 보면 무슨 파일인지 알 수 있습니다.
- 암호가 걸린 압축 파일은 인코딩 문제와 별개입니다. 암호가 틀리면 이름이 아니라 압축 해제 자체가 실패합니다.
- 표준 방식(파일명 자체를 UTF-8로 저장)이 항상 정답은 아닙니다. 개발사 문서도 이 방식이 일부 프로그램에서 오히려 깨져 보인다고 적고 있습니다.[1]
정리
한글 파일명 깨짐은 고장이 아니라 ZIP이 파일명을 저장하는 방식이 여러 가지라서 생기는 호환성 문제입니다. 받은 파일은 푸는 쪽에서 인코딩을 바꿔 읽고, 보낼 파일은 확장 필드에 UTF-8을 함께 저장하는 방식으로 압축하면 대부분 해결됩니다. 배포용이라면 파일명을 영문으로 두는 것이 가장 확실합니다.[1][2]