paper&honey

직접 실험·검증한 가이드

작성 paper&honey 운영자 게시 수정

txt·자막 파일 한글이 깨질 때 — 인코딩 이야기

내 PC 메모장에선 멀쩡한 텍스트 파일이 다른 기기나 자막 플레이어에선 "ȸ�Ƿ�" 같은 외계어가 되곤 합니다. 영상 자막(.srt·.smi) 파일이 한글만 깨져 나오는 것도 같은 문제입니다. 파일이 손상된 게 아닙니다. 글자를 저장한 방식(인코딩)과 여는 쪽이 읽는 방식이 어긋나서 생기는 착시입니다. 같은 문장을 인코딩별로 저장해 바이트를 들여다보고, 깨짐이 어디서 나오는지 직접 재현했습니다.

같은 "회의록"인데 인코딩마다 바이트가 다르다

"회의록 안건 승인"을 세 가지 인코딩으로 저장하고 앞부분 바이트를 16진수로 찍었습니다. 화면엔 다 똑같이 보이지만 디스크에 담긴 바이트는 완전히 다릅니다.

'회의록' 첫 바이트
EUC-KR(ANSI) : C8 B8 C0 C7 B7 CF        ← 한 글자당 2바이트
UTF-8        : ED 9A 8C EC 9D 98 EB A1 9D ← 한 글자당 3바이트
UTF-16-LE    : 8C D6 58 C7 5D B8        ← 2바이트(바이트 순서 뒤바뀜)

EUC-KR(윈도우 메모장의 "ANSI")은 한글을 2바이트로, UTF-8은 3바이트로 적습니다. 여는 프로그램이 C8 B8이라는 바이트를 EUC-KR로 읽으면 "회"가 되지만 UTF-8로 읽으면 규칙에 안 맞아 깨집니다. 같은 바이트, 다른 해석 — 여기서 모든 깨짐이 시작됩니다.

오독을 그대로 재현해봤다

인코딩을 일부러 어긋나게 읽어 깨짐 문자열을 만들어봤습니다.

EUC-KR 파일을 UTF-8로 읽으면 →  ȸ�Ƿ� �Ȱ� ����
UTF-8 파일을 EUC-KR로 읽으면 →  ������濡� ���嫄� ��뱀��

깨진 모양으로 방향을 짐작할 수 있습니다. 예전 방식(EUC-KR)으로 만든 파일을 요즘 프로그램(UTF-8 기본)이 읽으면 ȸ�Ƿ�처럼 물음표 비슷한 대체문자가 섞이고, 반대로 UTF-8 파일을 옛 프로그램이 EUC-KR로 읽으면 ������濡�처럼 알 수 없는 한글이 쏟아집니다. "내 PC에선 멀쩡한데 남에게 보내면 깨진다"는 대개 이 조합입니다 — 내 메모장은 ANSI(EUC-KR)로 저장하는데, 받는 쪽 앱은 UTF-8을 기대하는 식이죠.

그래서 어떻게 맞추나

근본 해결은 UTF-8로 저장하는 것입니다. UTF-8은 웹·맥·모바일·최신 윈도우가 공통으로 기대하는 표준이라, UTF-8로 저장해 두면 어디서 열어도 깨질 확률이 가장 낮습니다. 윈도우 메모장이라면 "다른 이름으로 저장" 창 아래쪽 인코딩을 ANSI 대신 UTF-8로 바꾸면 됩니다. 이미 EUC-KR로 만들어져 받은 파일이라면, 여는 쪽에서 인코딩을 바로잡아 다시 저장하면 됩니다. 이 "인코딩을 판별해 UTF-8로 다시 저장"하는 과정은 CSV에서 겪는 문제와 완전히 같은 원리라, paper&honey의 CSV 한글 깨짐 해결 도구가 하는 일과 동일합니다(현재 이 도구는 CSV 기준이지만 인코딩 처리 방식은 텍스트 파일과 같습니다). 원리는 엑셀 CSV 한글 깨짐 가이드에서 바이트까지 파고들었습니다.

자막 파일(.srt·.smi)이 깨질 때

영상 자막이 한글만 깨진다면 십중팔구 자막 파일이 EUC-KR인데 플레이어가 UTF-8로 읽는 경우입니다. 자막 파일을 텍스트 편집기로 열어 UTF-8로 다시 저장하면 대개 해결됩니다. 간혹 자막을 영상에 직접 입히는(하드코딩) 과정에서 깨지기도 하는데, 이때도 원인은 같은 인코딩 문제라 자막 파일을 UTF-8로 맞춘 뒤 진행하면 됩니다.

인코딩 이름들이 헷갈릴 때

Q. 메모장의 'ANSI'가 뭔가요? 한국어 윈도우에서 ANSI는 사실상 EUC-KR(정확히는 CP949) 계열을 뜻합니다. 오래된 기본값이라 국내 프로그램끼리는 잘 통하지만, 웹·맥·모바일로 나가면 깨질 여지가 큽니다. 그래서 요즘은 UTF-8 저장이 권장됩니다.

Q. UTF-8과 UTF-8(BOM 포함)은 뭐가 다른가요? BOM은 파일 맨 앞에 "이건 UTF-8"이라고 알리는 몇 바이트짜리 표시입니다. 엑셀에서 CSV를 열 땐 BOM이 있어야 안 깨지지만, 일부 프로그램·자막 플레이어는 BOM을 글자로 오인해 앞에 이상한 기호를 보이기도 합니다. 용도에 따라 갈리는데, 자막·일반 txt는 보통 BOM 없는 UTF-8이 무난합니다.

Q. UTF-16으로 저장하면 안 되나요? UTF-16도 한글을 담을 수 있지만, 많은 프로그램·자막 플레이어가 UTF-8을 기본으로 기대해서 UTF-16 파일을 못 읽거나 깨뜨리는 경우가 있습니다. 호환성 면에서는 UTF-8이 가장 안전한 선택입니다.