PRELAPS 깨진 글자 복구기

압축 파일 안 한글 파일명이 깨질 때

zip 을 풀었더니 안의 파일 이름이 ¿ù°£º¸°í¼­.xlsxýÑÝÑ.hwp 처럼 나오는 경우입니다. 파일 내용은 멀쩡한데 이름만 깨진 것이라면 되돌릴 수 있습니다.

왜 이름만 깨지나

ZIP 형식에는 파일명을 어떤 방식으로 적었는지 표시하는 자리가 있습니다. 규격상 GP bit 11 이라고 부르는 한 칸인데, 여기가 켜져 있으면 "이름은 UTF-8 이다" 라는 뜻입니다.

문제는 옛날 압축 프로그램들이 이 칸을 비워둔 채 저장한다는 것입니다. 그러면 이름이 그 컴퓨터의 지역 코드페이지(한국 윈도우면 CP949)로 적힙니다. 만든 사람의 컴퓨터에서는 잘 보입니다 — 같은 코드페이지로 읽으니까요.

그런데 그 파일을 맥·리눅스·다른 나라 윈도우에서 열면 거기서는 다른 표로 읽습니다. 그래서 받는 쪽에서만 깨집니다. 파일을 잘못 만든 게 아니라 표시를 안 붙인 것이라, 카톡이나 메일로 주고받을 때 특히 자주 겪습니다.

내용은 멀쩡합니다

중요한 점은 이름과 내용이 별개로 저장된다는 것입니다. 압축된 데이터 자체는 인코딩과 아무 상관이 없습니다. 그래서 이름이 아무리 깨져 보여도 파일을 열면 안의 내용은 정상입니다.

이름을 하나씩 손으로 고치는 방법도 있지만, 파일이 수십 개면 현실적이지 않고 어차피 원래 이름이 뭐였는지 알 수 없습니다.

이 도구로 고치는 법

깨진 글자 복구기파일 탭에 zip 파일을 그대로 올리세요. 압축을 풀 필요가 없습니다.

안의 이름들을 판별해서 이전 이름 → 새 이름 목록을 보여줍니다. 맞으면 새 zip 을 받으시면 됩니다. 이미 UTF-8 로 제대로 적혀 있던 항목은 흐리게 표시되어 구분됩니다.

압축 데이터는 손대지 않습니다. 이 도구는 데이터 블록을 그대로 복사하고 헤더의 이름만 새로 씁니다. 풀었다 다시 압축하는 게 아니라서 파일 내용이 손상될 여지가 없고, 처리도 즉시 끝납니다.

파일은 서버로 올라가지 않습니다. 브라우저 안에서만 처리되므로 사내 자료도 그대로 올리셔도 됩니다.

이름 하나만으로는 판별이 어렵다

이 도구는 안의 파일명을 전부 이어붙여 한 덩어리로 판별합니다. 이름 하나는 너무 짧아서 통계가 성립하지 않기 때문입니다. a.txt 한 개만 들어 있는 zip 은 판별이 어려울 수 있지만, 보통 여러 개가 들어 있으므로 실사용에서는 문제가 되지 않습니다.

안 되는 경우

아래 세 가지는 감지해서 사유를 표시하고 거부합니다. 조용히 잘못된 결과를 내놓지 않습니다.

암호가 걸린 zip — 이름 정보에도 접근 제약이 있습니다.
ZIP64 형식 — 4GB 를 넘는 큰 압축 파일에 쓰이는 확장 형식입니다.
분할 압축.z01, .part1.rar 처럼 여러 조각으로 나뉜 것.

rar·7z 는 지원하지 않습니다. zip 만 됩니다. 다른 형식이라면 압축을 풀어서 zip 으로 다시 묶은 뒤 올려보세요 — 다만 그 과정에서 이미 깨진 이름이 그대로 굳어질 수 있으니, 가능하면 원본을 만든 사람에게 UTF-8 로 다시 압축해 달라고 하는 편이 확실합니다.

다시 안 깨지게 압축하려면

반디집·알집 같은 프로그램에는 「파일명을 UTF-8 로 저장」 옵션이 있습니다. 남에게 줄 파일이라면 켜두세요. 윈도우 탐색기의 기본 압축 기능은 최근 버전에서 UTF-8 을 쓰지만, 오래된 환경에서는 그렇지 않습니다.

가장 확실한 방법은 파일명을 영어와 숫자로만 두는 것입니다. 영어 알파벳은 어느 표에서든 번호가 같아서 애초에 깨질 일이 없습니다. 왜 그런지는 EUC-KR 과 UTF-8 은 뭐가 다른가에 정리했습니다.