본문 바로가기

문자 인코딩 깨짐 해결 가이드 - UTF-8 변환부터 깨진 한글 복구까지

메모장에서 글자가 ?나 □로 보이거나 한글이 외계어처럼 깨졌다면 인코딩 문제입니다. 원인 진단부터 UTF-8 변환, 깨진 파일 복구까지 단계별로 정리했습니다.


문자 인코딩 깨짐 해결 가이드 - UTF-8 변환부터 깨진 한글 복구까지

한글 파일을 열었더니 글자가 모조리 ㅁㅁㅁ로 보이거나, 외국에서 받은 텍스트 파일이 ?로 가득 차 있던 경험이 한번쯤 있으실 겁니다. 작업 도중 갑자기 깨진 글자를 마주하면 막막합니다. 다행히 대부분의 깨짐 현상은 원인만 알면 몇 분 안에 복구할 수 있습니다.

문자 인코딩이 무엇이고 왜 깨지는가

컴퓨터는 글자를 그대로 저장하지 않습니다. 모든 문자는 숫자(코드 포인트)로 변환된 뒤 0과 1로 저장됩니다. 이때 어떤 문자에 어떤 숫자를 배정할지 정한 규칙이 바로 문자 인코딩입니다. 한국어 환경에서 자주 마주치는 인코딩은 다음 세 가지입니다.

  • UTF-8: 전 세계 모든 문자를 표현하는 표준. 웹과 리눅스, macOS의 기본값입니다
  • EUC-KR: 한글 2바이트 인코딩. 과거 윈도우와 한국 사이트에서 널리 쓰였습니다
  • CP949(MS949): EUC-KR의 확장판. 윈도우 기본 한글 인코딩입니다

저장할 때 사용한 인코딩과 열 때 사용한 인코딩이 다르면 글자가 깨집니다. UTF-8로 저장된 한글 파일을 EUC-KR이라고 가정하고 열면 글 같은 외계어가 나옵니다. 반대로 EUC-KR을 UTF-8로 열면 ?나 □ 기호가 나타납니다.

인코딩 깨짐의 99%는 "저장한 인코딩"과 "읽는 인코딩"의 불일치 때문입니다. 파일 자체가 망가진 것이 아니라 해석 방식이 틀렸을 뿐입니다.

깨진 글자 패턴으로 원인 찾는 법

깨진 형태만 봐도 어떤 인코딩 충돌인지 짐작할 수 있습니다. 가장 흔한 패턴을 정리하면 다음과 같습니다.

깨진 모양 예시원본 인코딩현재 해석해결 방향
안녕하세요 → ?????EUC-KRUTF-8로 읽음EUC-KR로 다시 열기
안녕하세요 → 안녕하세요UTF-8Latin-1로 읽음UTF-8로 다시 열기
안녕하세요 → ¾È³çÇϼ¼¿äEUC-KRLatin-1로 읽음EUC-KR로 다시 열기
맨 앞에 가 붙음UTF-8 with BOMBOM 없이 읽음BOM 제거 후 저장
참고: BOM(Byte Order Mark)은 파일 맨 앞에 붙는 3바이트 표식입니다. 윈도우 메모장은 UTF-8 저장 시 BOM을 자동으로 추가하지만, 일부 프로그래밍 환경(PHP, 셸 스크립트 등)에서는 이 BOM 때문에 오류가 발생합니다.

운영체제별 문자 인코딩 깨짐 해결 방법

윈도우

윈도우 메모장은 파일을 열 때 인코딩을 자동 감지하지만 정확도가 떨어집니다. 깨진 파일을 봤다면 다른 이름으로 저장 창에서 인코딩을 직접 바꿔보십시오. UTF-8, UTF-8 with BOM, ANSI(=CP949), UTF-16 LE 네 가지 중 맞는 것을 고르면 됩니다. 2019년 이후 윈도우 10/11 메모장은 기본 저장이 UTF-8로 바뀌었습니다. 옛날 텍스트 파일이 깨져 보인다면 ANSI로 다시 열어보면 보통 해결됩니다.

macOS

기본 텍스트 편집기는 UTF-8을 표준으로 사용합니다. EUC-KR 파일이 깨져 보이면 파일 → 다시 열기 → 인코딩 선택 메뉴를 활용하십시오. 또는 터미널에서 iconv -f EUC-KR -t UTF-8 input.txt > output.txt 명령어로 일괄 변환할 수 있습니다.

리눅스

리눅스는 iconv가 표준 도구입니다. 디렉터리 안의 파일을 모두 변환하려면 find . -name "*.txt" -exec iconv -f CP949 -t UTF-8 {} -o {}.utf8 \; 같은 한 줄 명령으로 처리할 수 있습니다.

코드 에디터에서 인코딩 변환하기

개발자나 블로거라면 코드 에디터에서 직접 인코딩을 다루는 경우가 많습니다. 주요 에디터별 처리법을 정리했습니다.

  • VS Code: 우측 하단 상태바의 "UTF-8" 클릭 → "Reopen with Encoding" 또는 "Save with Encoding" 선택
  • Notepad++: 메뉴 → 인코딩 → 인코딩 변환 → 변환할 인코딩 선택 후 저장
  • Sublime Text: File → Reopen with Encoding 메뉴에서 인코딩 변경
  • IntelliJ/WebStorm: 우측 하단 인코딩 표시 클릭 → Reload 또는 Convert 선택
팁: 작업 파일을 변환할 때는 반드시 원본 백업본을 따로 두십시오. 잘못된 인코딩으로 한 번 저장하면 데이터 손실이 발생할 수 있습니다. 특히 EUC-KR에 없는 일부 한자나 특수문자는 UTF-8에서 EUC-KR로 변환할 때 ?로 바뀌어 영구 손실됩니다.

웹페이지와 DB 인코딩 문제 해결

웹사이트나 데이터베이스에서 한글이 깨지는 경우는 보통 다음 세 지점 중 하나가 원인입니다.

  • HTML 메타 태그 누락 또는 오류 (<meta charset="UTF-8">)
  • 웹 서버 응답 헤더의 Content-Type charset 누락
  • DB 테이블 컬럼의 charset 또는 collation 불일치

MySQL과 MariaDB에서는 utf8mb4 사용을 권장합니다. 일반 utf8은 3바이트까지만 지원해 이모지나 일부 특수문자가 깨집니다. 테이블 생성 시 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci로 지정하면 안전합니다. 이미 데이터가 깨진 상태로 저장됐다면 복구가 까다롭습니다. 일부 케이스는 "이중 인코딩"이라 불리는 현상으로, UTF-8을 Latin-1로 잘못 해석한 결과를 다시 UTF-8로 저장한 경우입니다. 원본 바이트 시퀀스가 남아 있다면 역변환이 가능하지만 손실된 비트는 복원되지 않습니다.

깨진 파일 복구가 어려운 경우

다음 상황에서는 완전 복구가 사실상 불가능합니다.

  1. 깨진 상태로 한 번이라도 저장(write)이 일어난 경우
  2. EUC-KR로 저장 가능하지 않은 문자(중국어, 일본어 일부, 이모지)가 변환 과정에서 ?로 치환된 경우
  3. 파일 일부 바이트가 손상되거나 잘려나간 경우

이런 사고를 막으려면 UTF-8을 표준으로 통일하는 것이 최선입니다. 새로 만드는 모든 텍스트, 코드, DB는 UTF-8(웹과 DB는 utf8mb4)로 시작하면 깨짐 사고를 사전에 차단할 수 있습니다.

인코딩 외에도 일상 작업에서 자주 쓰이는 간단한 온라인 도구가 많습니다. 영상이나 이미지 작업 시 자주 사용되는 화면 비율 계산기처럼, 작업 환경에 맞는 유틸리티 한두 개만 즐겨찾기 해두면 시간을 크게 아낄 수 있습니다.

지금 당장 할 일은 두 가지입니다. 첫째, 깨진 파일이 있다면 위 표의 패턴을 참고해 원본 인코딩을 추정하고 코드 에디터에서 "Reopen with Encoding"을 시도하십시오. 둘째, 앞으로 만드는 모든 파일은 UTF-8로 통일하십시오. 이 두 가지만 지켜도 인코딩 깨짐 문제의 90% 이상은 사라집니다.

3일 무료체험큰손탐지기, 지금 바로 시작하세요

설치 없이 웹에서 바로 사용 가능 · PC & 모바일 지원

무료체험 시작
카카오톡 상담