파일은 멀쩡하다. 읽는 쪽이 틀렸다
자막 파일에 들어 있는 것은 바이트입니다. 바이트를 글자로 바꾸려면 어떤 인코딩으로 쓰였는지 알아야 합니다. 이것을 잘못 고르면 깨짐이 됩니다. 파일에서 바이트 하나 빠진 것도 아닙니다. 올바른 인코딩으로 다시 읽으면 글자가 돌아옵니다.
그래서 일이 둘로 나뉩니다. 원래 인코딩을 알아내는 것과 플레이어가 알아볼 수 있는 인코딩으로 저장하는 것. 앞은 읽어보며 점수 매기는 일, 뒤는 다시 저장하는 일입니다. 둘은 다른 문제를 해결합니다.
다섯 가지 모습, 다섯 가지 원인
깨짐은 우연히 생기지 않습니다. 모습이 그대로 원인을 드러냅니다:
- 악센트 있는 알파벳이 덩어리로(`ä½ å¥½`): UTF-8 중국어를 1바이트 인코딩으로 읽은 모습 — UTF-8에서 중국어 글자 하나는 3바이트라서, 1바이트씩 읽으면 각 바이트가 저마다 알파벳이 됩니다
- CJK 문자가 줄줄이인데 흔한 글자가 하나도 없음: UTF-8을 GBK로 읽은 모습 — 2바이트씩 다시 짝지으니 전부 잘 안 쓰는 글자에 걸립니다
- 통화 기호와 수학 기호 천지: 바이트가 기호 영역에 떨어진 모습. Mac Roman이나 Latin-1 계열로 읽혔을 때 흔합니다
- 제어 문자가 섞임: 바이트가 보이지 않는 제어 영역에 떨어진 모습. 화면에서는 빈칸이나 네모로 보입니다
- 네모난 물음표 `�`: 이것은 대체 문자이지 깨짐이 아닙니다 — '여기에 글자가 있었는데 읽는 순간 사라졌다'는 표시입니다

대체 문자를 고칠 수 없는 이유
대체 문자가 경계선입니다. `�`가 나온다는 것은 더 앞선 단계에서(대개 어떤 프로그램이 한 번 읽고 다시 저장하면서) 바이트가 버려졌다는 뜻이고, 사라진 부분에 대한 기록은 어디에도 없습니다. 이 상태에서는 역산할 근거가 없어 누구도 고칠 수 없습니다.
그래서 복구 페이지는 두 경우를 나눕니다. 파일을 올리면 원래 바이트가 남아 있어 인코딩을 하나씩 시도할 수 있고, 붙여넣은 내용에 대체 문자가 들어 있으면 '고칠 수 없습니다. 원본 파일을 올려주세요'라고 분명히 밝힙니다.
반대 경우도 있습니다. 내용은 완전히 잘 읽히는데 플레이어에서는 여전히 깨집니다. 파일 잘못이 아니라 플레이어가 인코딩을 잘못 고른 것입니다. 파일을 고쳐 봐야 소용없고, BOM 있는 UTF-8이나 GBK 사본을 넘기면 됩니다.

복구할 때 무엇을 비교하는가
도구는 가능한 인코딩을 모두 시도한 뒤 결과마다 점수를 매깁니다. 흔한 글자 비율, 악센트 연속, 기호 연속, CJK 줄이 잘 안 쓰는 글자 행렬인지. 점수가 가장 높은 것이 맨 위로 갑니다.
점수가 뚜렷이 좋아지지 않으면 추천하지 않습니다. 어중간하게 말 같은 결과를 넘기느니 '이것은 그대로 읽힙니다'라고 말하는 편을 택합니다. 두 번 잘못된 글(저장에서 한 번, 복구에서 또 한 번)은 상위 후보에 역산을 한 번 더 걸어 봅니다.

올바른 인코딩으로 저장해야 끝난다
고친 텍스트도 플레이어가 알아볼 수 있는 인코딩으로 저장해야 비로소 쓸모가 있습니다. Windows 플레이어는 BOM으로 판단하는 일이 많아 BOM 있는 UTF-8이 가장 편하고, 오래된 기기나 일부 지역 플레이어는 GBK를 찾습니다. 고를 수 있는 것은 UTF-8, UTF-8(BOM 포함), GBK, Big5, Shift_JIS, EUC-KR이며, 담기지 않으면 다른 것으로 바꾸라고 알립니다(GBK에는 한국어를 담을 수 없습니다).

관련 도구와 가이드
조작 순서 전체는 자막 깨짐 복구 사용법, SRT 파일에 실제로 무엇이 들어 있는지는 SRT 파일 안에는 무엇이 있나, 인코딩은 정상인데 내용이 지저분하면(워터마크, 광고, 청각장애인 표기) 자막 정리.