한글로 저장했는데, 왜 외계어로 보여?

한글 TXT·CSV 파일이 다른 앱에서 깨져 보일 때, 같은 바이트를 다른 문자 인코딩으로 읽는 과정을 고정 예시로 설명합니다. 원본 보존과 재열기·별도 UTF-8 사본, 글꼴·파일 손상과의 차이도 구분합니다.
deleted's avatar
Nov 04, 2026
한글로 저장했는데, 왜 외계어로 보여?

한글로 적은 TXT 파일을 저장해서 보냈습니다. 내 화면에서는 분명 읽을 수 있었습니다. 그런데 다른 앱에서 연 사람이 이상한 글자가 가득한 화면을 돌려보냅니다.

번역을 부탁한 것도 아닌데, 갑자기 해독 업무가 생겼습니다. 파일이 망가진 걸까요?

간달프가 촛불 옆에서 두루마리와 여러 문서를 빠르게 펼치고 옮겨 가며 읽는 원본 영화 장면.
분명 내가 쓴 글인데, 해독부터 시작 · The Lord of the Rings / Tenor

문서를 뒤적이는 장면은 낯선 글자를 만난 반응의 비유입니다. 사용자 파일을 읽거나 복구한 실험 화면이 아닙니다.

같은 바이트도 읽는 규칙이 다르면

텍스트 파일에는 글자 모양 자체가 들어 있는 것이 아니라, 문자를 표현한 바이트가 들어 있습니다. 문자를 어떤 바이트로 나타낼지 정하는 규칙이 문자 인코딩입니다. 읽는 프로그램은 그 규칙에 맞춰 바이트를 다시 문자로 해석합니다.[1]

저장할 때 쓴 규칙과 읽을 때 적용한 규칙이 어긋나면, 같은 바이트가 다른 문자로 보일 수 있습니다. 글꼴 색을 바꾼 것이 아니라 어떤 문자로 읽었는지가 달라진 겁니다.

아래에서는 ‘한글’ 두 글자를 UTF-8로 표현한 고정 바이트를 두 방식으로 읽었습니다.

고정 가상 샘플 · 사용자 TXT·CSV 파일을 읽은 결과가 아닙니다

두 패널에 같은 바이트 사용 · 16진수 표기

ED 95 9C EA B8 80

저장 규칙에 맞춰 읽기

UTF-8 디코더

한글

다른 규칙으로 읽기

windows-1252 디코더

한글

같은 여섯 바이트를 TextDecoder의 UTF-8과 windows-1252로 읽은 값을 정적으로 적었습니다. 파일 선택·변환·복구 기능은 없습니다. 다른 인코딩 불일치가 모두 이 글자 모양으로 나타나는 것도 아닙니다.

왼쪽과 오른쪽에 넣은 숫자는 같습니다. 달라진 것은 숫자를 문자로 읽는 규칙입니다. UTF-8로 만든 바이트를 맞는 UTF-8 디코더로 읽으면 원래 ‘한글’이 됩니다.[2]

인코딩은 번역이나 암호화가 아닙니다

문자 인코딩은 한국어 문장을 다른 언어로 번역하는 기능이 아닙니다. 글자를 바이트로 표현하고 다시 읽는 규칙입니다. 읽기 어려워 보인다고 비밀 메시지나 암호화된 파일이 된 것도 아닙니다.

UTF-8은 널리 사용하는 문자 인코딩이며 W3C도 새 콘텐츠와 데이터에 UTF-8 사용을 권합니다.[1] 하지만 이미 다른 규칙으로 저장된 파일까지 모두 UTF-8로 열면 해결된다는 뜻은 아닙니다. 그 파일을 저장할 때 실제로 쓴 인코딩을 확인해야 합니다.

또 ‘UTF-8’이라고 라벨만 바꾸는 것과, 문자를 정상적으로 읽은 뒤 UTF-8 바이트로 새로 저장하는 것은 다릅니다. 표시나 선언을 바꿨다고 파일 속 바이트가 저절로 변환되는 것은 아닙니다.[1]

원본은 남기고, 맞는 규칙으로 다시 열기

  • 먼저 원본 파일을 보존합니다. 깨진 화면을 본 상태에서 원본에 덮어쓰지 않습니다.
  • 파일을 만든 사람이나 내보낸 도구에서 저장 인코딩을 확인합니다. 그 인코딩을 지원하는 앱에서 해당 규칙으로 다시 열어 봅니다. 지원 형식과 선택 메뉴는 앱마다 다릅니다.
  • 문장이 정상인지 확인한 뒤, 필요하면 별도의 UTF-8 사본으로 저장합니다. 확인 전 변환이나 덮어쓰기를 해결책으로 삼지 않습니다.

이 예시처럼 원래 바이트가 남아 있고 맞는 읽기 규칙을 알면 다시 읽을 수 있습니다. 반면 잘못 읽은 결과를 대체 문자나 물음표로 바꾼 채 덮어썼다면, 원래 문자 정보가 남지 않았을 수 있습니다.

디코더는 잘못된 바이트를 만났을 때 오류를 내거나 대체 문자로 처리할 수 있습니다.[3] 이미 다른 문자로 저장된 자료가 인코딩 선택만으로 반드시 복구되는 것은 아닙니다. 이때는 보존한 원본이나 이전 버전을 먼저 찾아야 합니다.

한글이 이상하다고 모두 인코딩 문제는 아닙니다

프로그램이 문자를 알더라도 글꼴에 그 문자의 모양이 없으면 네모 같은 대체 표시가 나올 수 있습니다. 바이트를 잘못 읽은 경우와, 읽은 문자를 글꼴이 그리지 못하는 경우를 구분해야 합니다.[1]

파일 자체가 손상된 경우도 별도로 봐야 합니다. CSV에서 한글은 멀쩡한데 값이 한 열에 몰리는 문제라면 열을 나누는 구분자와 가져오기 설정을 확인할 일일 수 있습니다. 문자를 읽는 규칙과 열을 나누는 규칙은 같은 설정이 아닙니다.[4]

34편은 문자 수를 세는 단위, 40편은 URL의 정상적인 퍼센트 표기, 54편은 문장에 따라오는 서식을 다뤘습니다. 이번에는 같은 파일 바이트를 어떤 문자 규칙으로 읽었는지가 질문입니다.

한글이 외계어로 번역된 게 아니라, 읽는 쪽이 다른 규칙표를 펼쳤을 수 있습니다. 원본을 지키고, 쓴 규칙과 읽는 규칙부터 맞춰 봅시다.

[1] W3C — Character encodings for beginners

[2] MDN — TextEncoder · TextDecoder · WHATWG — windows-1252 index

[3] MDN — TextDecoder.fatal

[4] RFC 4180 — CSV fields and records

도입과 ‘한글’ 샘플은 가상입니다. 고정 바이트를 코드로 재현했지만 사용자 파일을 읽거나 쓰고, 변환·복구하지 않았습니다. windows-1252라는 명시된 디코더의 결과이며 다른 규칙을 섞어 부르지 않습니다. 원본 문서 읽기 장면은 반응의 비유입니다.

Share article