메인으로 돌아가기

CSV 파일 한글 깨짐 현상
원인과 해결 방법 (UTF-8, EUC-KR)

ExcelDiff · 2026년 4월

CSV 파일을 Excel에서 열었을 때 한글이 이상한 문자(물음표, 깨진 기호)로 표시되는 경험을 해본 적이 있을 겁니다. 또는 Python이나 데이터베이스에서 내보낸 CSV 파일을 열었을 때 처음부터 글자가 깨져 있는 경우도 있습니다. 이 문제는 모두 문자 인코딩(encoding) 방식의 불일치에서 비롯됩니다.

인코딩이란 무엇인가

컴퓨터는 모든 데이터를 숫자(0과 1)로 저장합니다. "가"라는 글자도 내부적으로는 특정 숫자로 저장됩니다. 인코딩이란 "어떤 글자를 어떤 숫자로 표현할 것인가"를 정의한 규칙입니다.

문제는 같은 숫자가 인코딩 방식에 따라 다른 글자를 뜻할 수 있다는 점입니다. 파일을 저장할 때 사용한 인코딩과 열 때 사용하는 인코딩이 다르면 글자가 엉뚱하게 표시됩니다. 이것이 "한글 깨짐"의 본질적인 원인입니다.

UTF-8과 EUC-KR의 차이

UTF-8

현재 웹 표준이자 가장 널리 쓰이는 인코딩입니다. 한글을 포함한 전 세계 거의 모든 문자를 표현할 수 있습니다. Python, Linux, macOS의 기본 인코딩이며, 대부분의 최신 시스템이 UTF-8을 사용합니다.

EUC-KR (CP949)

한국어를 위해 만들어진 인코딩으로, 과거 Windows 한국어 버전의 기본 인코딩이었습니다. Excel(Windows 버전)은 한국어 환경에서 CSV 파일을 열 때 기본적으로 EUC-KR로 해석하려 합니다. 따라서 UTF-8로 저장된 한글 CSV를 Excel에서 그냥 더블클릭하면 깨집니다.

핵심 원인: UTF-8로 저장된 CSV를 Excel이 EUC-KR로 읽으려 해서 한글이 깨집니다. 반대의 경우도 마찬가지입니다.

해결 방법 1 — UTF-8 BOM으로 저장하기

가장 간단한 해결책입니다. BOM(Byte Order Mark)은 파일 맨 앞에 인코딩 정보를 알려주는 특수 문자를 추가하는 방식입니다. Excel은 BOM을 보고 "이 파일은 UTF-8이구나"를 인식해 올바르게 엽니다.

Python에서 UTF-8 BOM으로 저장

import pandas as pd df = pd.DataFrame({"이름": ["홍길동", "김영희"], "나이": [32, 28]}) # utf-8-sig가 UTF-8 with BOM df.to_csv("data.csv", index=False, encoding="utf-8-sig")

메모장에서 UTF-8 BOM으로 저장

  1. 메모장에서 CSV 파일을 엽니다.
  2. 파일 → 다른 이름으로 저장을 선택합니다.
  3. 인코딩 드롭다운에서 "UTF-8 (BOM 포함)"을 선택합니다.
  4. 저장 후 Excel에서 열면 한글이 정상 표시됩니다.

팁: Python pandas의 read_csv()는 기본적으로 UTF-8로 읽습니다. 기존 EUC-KR 파일을 읽을 때는 encoding="euc-kr" 또는 encoding="cp949"를 지정하세요.

해결 방법 2 — Excel 텍스트 가져오기 마법사 사용

CSV 파일을 더블클릭이 아닌 Excel의 "데이터 가져오기" 기능으로 열면 인코딩을 직접 지정할 수 있습니다.

Excel 2016 이상 (Power Query 방식)

  1. Excel을 열고 데이터 → 텍스트/CSV에서를 클릭합니다.
  2. CSV 파일을 선택합니다.
  3. 미리 보기 창 상단의 파일 원본 드롭다운에서 65001: 유니코드(UTF-8)을 선택합니다.
  4. 한글이 정상적으로 보이면 로드를 클릭합니다.

Excel 구버전 (텍스트 가져오기 마법사)

  1. Excel을 열고 데이터 → 외부 데이터 가져오기 → 텍스트에서를 선택합니다.
  2. CSV 파일을 선택하면 텍스트 가져오기 마법사가 열립니다.
  3. 1단계에서 파일 원본을 65001(UTF-8) 또는 51949(EUC-KR)로 설정합니다.
  4. 구분 기호로 "쉼표"를 선택하고 마침을 클릭합니다.

해결 방법 3 — VS Code나 메모장++ 으로 인코딩 변환

파일의 인코딩 자체를 변환하는 방법입니다. 한 번 변환해두면 이후에는 Excel에서 바로 열 수 있습니다.

VS Code 사용

  1. VS Code에서 CSV 파일을 엽니다.
  2. 우측 하단 상태 표시줄에서 현재 인코딩(예: UTF-8)을 클릭합니다.
  3. "인코딩으로 다시 저장"을 선택합니다.
  4. "UTF-8 with BOM"을 선택하면 BOM이 추가된 파일로 저장됩니다.

주의: BOM이 추가된 파일은 일부 리눅스 시스템이나 Python에서 BOM 문자가 데이터에 포함되어 문제가 될 수 있습니다. Excel 전용으로만 사용할 파일에만 BOM을 추가하세요.

자주 발생하는 추가 문제들

숫자가 날짜로 자동 변환되는 문제

CSV에서 "2024-01" 같은 값을 Excel이 날짜로 자동 인식해 "2024년 1월"로 바꿔버리는 경우가 있습니다. 이를 방지하려면 텍스트 가져오기 마법사에서 해당 열의 데이터 형식을 "텍스트"로 지정하거나, 값 앞에 작은따옴표(')를 붙여 텍스트로 인식하게 할 수 있습니다.

큰 숫자가 지수 표기로 바뀌는 문제

주민등록번호나 긴 코드 번호처럼 자릿수가 많은 숫자를 Excel이 지수 표기(예: 1.23E+15)로 바꾸는 경우가 있습니다. 마찬가지로 텍스트 가져오기 마법사에서 해당 열을 "텍스트" 형식으로 지정해야 원본 값이 유지됩니다.

구분자 충돌 문제

데이터 값 안에 쉼표가 포함된 경우 CSV 파일이 올바르게 파싱되지 않을 수 있습니다. 표준적인 해결책은 해당 값을 큰따옴표로 감싸는 것입니다. 또는 쉼표 대신 탭(\t)이나 파이프(|)를 구분자로 사용하는 TSV 형식을 고려할 수 있습니다.

정리: 상황별 해결 방법

인코딩 걱정 없이 CSV 파일 비교하기

ExcelDiff는 UTF-8과 EUC-KR 인코딩을 자동으로 처리합니다. CSV 파일을 올리면 바로 비교를 시작할 수 있습니다.

무료로 파일 비교하기