DiffMate

문자 인코딩 가이드

파일 비교 시 자주 발생하는 인코딩 문제와 해결 방법을 안내합니다.

인코딩이란?

컴퓨터는 모든 데이터를 0과 1의 이진수로 저장합니다. 텍스트 파일에서 "가"라는 글자를 저장하려면, 이 글자를 특정 숫자(바이트 값)로 변환해야 합니다. 이 변환 규칙을 "인코딩(encoding)"이라고 합니다.

같은 글자도 인코딩 방식에 따라 다른 바이트 값으로 저장됩니다. 예를 들어 "가"라는 글자는 UTF-8에서는 0xEA 0xB0 0x80 (3바이트), EUC-KR에서는 0xB0 0xA1 (2바이트)로 저장됩니다.

파일을 열 때 잘못된 인코딩으로 읽으면 글자가 깨져 보입니다. 이것이 흔히 말하는 "글자가 깨졌다"는 현상입니다.

주요 인코딩 종류

UTF-8은 현재 가장 널리 사용되는 인코딩입니다. 전 세계 모든 언어의 문자를 표현할 수 있으며, 웹의 95% 이상이 UTF-8을 사용합니다. 영문 1바이트, 한글 3바이트로 저장됩니다. macOS, 리눅스에서 기본 인코딩으로 사용됩니다.

EUC-KR(CP949)은 한국어 전용 인코딩입니다. 윈도우 한국어판에서 오랫동안 기본 인코딩으로 사용되었습니다. 한글 2바이트, 영문 1바이트로 저장됩니다. 윈도우 메모장에서 "ANSI"로 저장하면 실제로는 EUC-KR(CP949)로 저장됩니다.

UTF-16은 윈도우 내부에서 사용하는 인코딩입니다. 모든 문자를 2바이트 또는 4바이트로 표현합니다. 엔디안(byte order)에 따라 UTF-16LE(Little Endian)와 UTF-16BE(Big Endian)로 나뉩니다.

ISO-8859-1(Latin-1)은 서유럽 언어용 인코딩입니다. 1바이트로 256개의 문자를 표현합니다. 한국어는 표현할 수 없지만, 바이너리 데이터를 텍스트로 읽을 때 폴백으로 사용되기도 합니다.

DiffMate의 인코딩 자동 감지

DiffMate는 파일을 열 때 다음 순서로 인코딩을 자동 감지합니다:

1단계 - BOM 확인: 파일 시작 부분에 BOM(Byte Order Mark)이 있는지 확인합니다. UTF-8 BOM: 0xEF 0xBB 0xBF UTF-16LE BOM: 0xFF 0xFE UTF-16BE BOM: 0xFE 0xFF

2단계 - UTF-8 시도: BOM이 없으면 먼저 UTF-8로 디코딩을 시도합니다. UTF-8은 유효하지 않은 바이트 시퀀스가 있으면 에러가 발생하므로, 성공하면 UTF-8 파일로 판단합니다.

3단계 - EUC-KR 시도: UTF-8이 실패하면 EUC-KR(CP949)로 디코딩을 시도합니다. 한국어 파일인 경우 대부분 이 단계에서 성공합니다.

4단계 - 폴백: 위 인코딩이 모두 실패하면 ISO-8859-1, UTF-16LE, UTF-16BE를 순차적으로 시도합니다.

이 과정은 파이썬 백엔드의 인코딩 감지 로직을 그대로 브라우저용으로 포팅한 것입니다. TextDecoder API의 fatal 옵션을 사용하여 잘못된 인코딩을 정확하게 걸러냅니다.

인코딩 문제 해결 방법

글자가 깨져 보일 때 시도할 수 있는 방법들입니다.

메모장으로 인코딩 변환하기: 파일을 메모장에서 열고, "다른 이름으로 저장" → 인코딩을 "UTF-8"로 선택하여 저장합니다. 이렇게 하면 대부분의 인코딩 문제가 해결됩니다.

VS Code로 인코딩 확인하기: VS Code에서 파일을 열면 하단 상태바에 현재 인코딩이 표시됩니다. 클릭하면 다른 인코딩으로 다시 열기(Reopen with Encoding) 또는 인코딩 변환(Save with Encoding)이 가능합니다.

리눅스/맥에서 iconv 사용하기: 터미널에서 iconv -f euc-kr -t utf-8 input.txt > output.txt 명령어로 인코딩을 변환할 수 있습니다.

엑셀 CSV 인코딩 문제: 엑셀에서 CSV를 저장할 때 "CSV UTF-8 (쉼표로 분리)"를 선택하면 UTF-8로 저장됩니다. 일반 "CSV"로 저장하면 시스템 기본 인코딩(한국어 윈도우에서는 EUC-KR)으로 저장됩니다.

인코딩 관련 자주 묻는 질문

Q: 파일이 어떤 인코딩인지 어떻게 알 수 있나요? A: 대부분의 텍스트 에디터(VS Code, Notepad++ 등)에서 파일을 열면 하단에 인코딩이 표시됩니다. 또는 file -i filename 명령어(리눅스/맥)로 확인할 수 있습니다.

Q: UTF-8과 UTF-8 BOM의 차이는 무엇인가요? A: UTF-8 BOM은 파일 시작에 3바이트(EF BB BF)가 추가된 것입니다. 이 바이트는 "이 파일은 UTF-8입니다"라는 표시입니다. 대부분의 프로그램에서 두 형식 모두 정상 작동하지만, 일부 프로그램에서 BOM을 인식하지 못해 깨지는 경우가 있습니다.

Q: 왜 동일한 내용인데 파일 크기가 다른가요? A: 인코딩에 따라 같은 글자도 차지하는 바이트 수가 다릅니다. 한글의 경우 UTF-8은 3바이트, EUC-KR은 2바이트입니다. 따라서 한글이 많은 파일은 EUC-KR이 더 작고, 영문이 많은 파일은 거의 동일합니다.

Q: 인코딩을 잘못 변환하면 데이터가 손실되나요? A: 가능합니다. 예를 들어 EUC-KR 파일을 UTF-8로 "읽어서" 다시 저장하면(변환 없이) 한글이 깨집니다. 반드시 올바른 원본 인코딩을 지정한 후 변환해야 합니다.

지금 비교 시작하기