CSV 파일을 Excel에서 열었을 때 한글이 이상한 문자(물음표, 깨진 기호)로 표시되는 경험을 해본 적이 있을 겁니다. 또는 Python이나 데이터베이스에서 내보낸 CSV 파일을 열었을 때 처음부터 글자가 깨져 있는 경우도 있습니다. 이 문제는 모두 문자 인코딩(encoding) 방식의 불일치에서 비롯됩니다.
컴퓨터는 모든 데이터를 숫자(0과 1)로 저장합니다. "가"라는 글자도 내부적으로는 특정 숫자로 저장됩니다. 인코딩이란 "어떤 글자를 어떤 숫자로 표현할 것인가"를 정의한 규칙입니다.
문제는 같은 숫자가 인코딩 방식에 따라 다른 글자를 뜻할 수 있다는 점입니다. 파일을 저장할 때 사용한 인코딩과 열 때 사용하는 인코딩이 다르면 글자가 엉뚱하게 표시됩니다. 이것이 "한글 깨짐"의 본질적인 원인입니다.
현재 웹 표준이자 가장 널리 쓰이는 인코딩입니다. 한글을 포함한 전 세계 거의 모든 문자를 표현할 수 있습니다. Python, Linux, macOS의 기본 인코딩이며, 대부분의 최신 시스템이 UTF-8을 사용합니다.
한국어를 위해 만들어진 인코딩으로, 과거 Windows 한국어 버전의 기본 인코딩이었습니다. Excel(Windows 버전)은 한국어 환경에서 CSV 파일을 열 때 기본적으로 EUC-KR로 해석하려 합니다. 따라서 UTF-8로 저장된 한글 CSV를 Excel에서 그냥 더블클릭하면 깨집니다.
핵심 원인: UTF-8로 저장된 CSV를 Excel이 EUC-KR로 읽으려 해서 한글이 깨집니다. 반대의 경우도 마찬가지입니다.
가장 간단한 해결책입니다. BOM(Byte Order Mark)은 파일 맨 앞에 인코딩 정보를 알려주는 특수 문자를 추가하는 방식입니다. Excel은 BOM을 보고 "이 파일은 UTF-8이구나"를 인식해 올바르게 엽니다.
팁: Python pandas의 read_csv()는 기본적으로 UTF-8로 읽습니다. 기존 EUC-KR 파일을 읽을 때는 encoding="euc-kr" 또는 encoding="cp949"를 지정하세요.
CSV 파일을 더블클릭이 아닌 Excel의 "데이터 가져오기" 기능으로 열면 인코딩을 직접 지정할 수 있습니다.
파일의 인코딩 자체를 변환하는 방법입니다. 한 번 변환해두면 이후에는 Excel에서 바로 열 수 있습니다.
주의: BOM이 추가된 파일은 일부 리눅스 시스템이나 Python에서 BOM 문자가 데이터에 포함되어 문제가 될 수 있습니다. Excel 전용으로만 사용할 파일에만 BOM을 추가하세요.
CSV에서 "2024-01" 같은 값을 Excel이 날짜로 자동 인식해 "2024년 1월"로 바꿔버리는 경우가 있습니다. 이를 방지하려면 텍스트 가져오기 마법사에서 해당 열의 데이터 형식을 "텍스트"로 지정하거나, 값 앞에 작은따옴표(')를 붙여 텍스트로 인식하게 할 수 있습니다.
주민등록번호나 긴 코드 번호처럼 자릿수가 많은 숫자를 Excel이 지수 표기(예: 1.23E+15)로 바꾸는 경우가 있습니다. 마찬가지로 텍스트 가져오기 마법사에서 해당 열을 "텍스트" 형식으로 지정해야 원본 값이 유지됩니다.
데이터 값 안에 쉼표가 포함된 경우 CSV 파일이 올바르게 파싱되지 않을 수 있습니다. 표준적인 해결책은 해당 값을 큰따옴표로 감싸는 것입니다. 또는 쉼표 대신 탭(\t)이나 파이프(|)를 구분자로 사용하는 TSV 형식을 고려할 수 있습니다.
encoding="utf-8-sig" 사용encoding="cp949" 사용ExcelDiff는 UTF-8과 EUC-KR 인코딩을 자동으로 처리합니다. CSV 파일을 올리면 바로 비교를 시작할 수 있습니다.
무료로 파일 비교하기