엑셀에서 CSV 한글이 깨질 때 — 원인과 3가지 해결법
쇼핑몰 주문 내역, 회원 명단, 은행 거래 내역 — 다운로드한 CSV를 엑셀로 열었더니 한글이 ㅁㄴㅇㄹ도 아닌 외계어로 나옵니다. 파일이 망가진 게 아닙니다. 엑셀이 파일의 인코딩을 잘못 추측했을 뿐이고, 해결법은 세 가지입니다.
왜 깨지나 — UTF-8과 EUC-KR
- 같은 한글이라도 파일에 저장되는 바이트는 인코딩에 따라 다릅니다 — 요즘 웹 표준은 UTF-8, 한국어 윈도우의 전통 기본값은 EUC-KR(CP949).
- 엑셀은 CSV를 더블클릭으로 열면 시스템 기본 인코딩(EUC-KR)이라고 가정합니다. UTF-8 파일을 EUC-KR로 해석하니 한글이 깨집니다.
- 파일 맨 앞에 BOM(UTF-8 표식)이 붙어 있으면 엑셀도 UTF-8로 정확히 읽습니다 — 그래서 같은 UTF-8인데 어떤 파일은 멀쩡하고 어떤 파일은 깨집니다.
- 원리가 더 궁금하면 글자 깨짐과 인코딩 가이드에서 자세히 다룹니다.
해결법 3가지
- 데이터 가져오기로 열기(권장) — 엑셀에서 빈 통합 문서를 열고 데이터 탭 → 텍스트/CSV에서 가져오기 → 파일 선택 → 미리보기에서 인코딩(파일 원본)을 UTF-8로 지정. 한글이 바로 살아납니다.
- 메모장으로 재저장 — CSV를 메모장으로 열어(메모장은 자동 감지) 다른 이름으로 저장 → 인코딩 "UTF-8(BOM)" 선택 후 저장. 이제 더블클릭으로도 멀쩡하게 열립니다.
- 구글 시트 우회 — 구글 시트는 인코딩을 자동 감지합니다. 시트에서 가져오기 한 뒤 엑셀(xlsx)로 다시 내려받으면 인코딩 문제 자체가 사라집니다.
반대 상황 — 엑셀 CSV가 다른 곳에서 깨질 때
- 엑셀의 "CSV(쉼표로 분리)" 저장은 EUC-KR로 저장됩니다 — 이 파일을 UTF-8만 받는 시스템(웹 업로드·개발 도구)에 올리면 한글이 깨집니다.
- 처방: 저장할 때 "CSV UTF-8(쉼표로 분리)" 형식을 선택하세요. 최신 엑셀에 기본 제공됩니다.
- 주의: 이 형식은 BOM이 붙습니다. 일부 개발 도구·DB 임포트는 BOM을 데이터로 오인해 첫 칼럼명이 이상해질 수 있으니, 그런 경우 메모장에서 "UTF-8"(BOM 없음)로 재저장하면 됩니다.
덤 — 010이 10으로 바뀌는 문제
- 전화번호 앞 0이 사라지거나 "1-2"가 "1월 2일"이 되는 건 인코딩이 아니라 엑셀의 자동 형식 변환 때문입니다.
- 해결: 더블클릭 대신 데이터 가져오기로 열면서 해당 열 형식을 "텍스트"로 지정 — 원본 그대로 유지됩니다.
- 이미 0이 날아간 파일은 복구할 수 없으므로(데이터 자체가 변형됨) 원본 CSV에서 다시 가져와야 합니다.
변환 도구로 확인한 CSV의 동작
CSV ↔ JSON 변환 도구에 아래 CSV를 넣어 본 결과입니다.
name,age,zip,memo
홍길동,30,01234,"서울, 강남"
이철수,,06236,
| CSV의 칸 | 변환된 값 | 의미 |
|---|---|---|
01234 | "01234" | 앞자리 0이 유지됨 (문자열로 읽음) |
30 | "30" | 숫자도 문자열 |
"서울, 강남" | "서울, 강남" | 따옴표 안의 쉼표는 칸을 나누지 않음 |
| (빈 칸) | "" | 빈 문자열 |
CSV 파일 자체에는 "01234"가 그대로 들어 있습니다. 0이 사라지는 것은 파일이 아니라 엑셀이 그 칸을 숫자로 해석하기 때문입니다. 모든 칸을 문자열로 읽는 도구에서는 0이 유지되므로, 0이 사라진 것처럼 보이면 원본 CSV를 메모장이나 이 도구로 열어 값이 남아 있는지 먼저 확인하세요.
구분자도 같은 식으로 확인할 수 있습니다. 세미콜론으로 구분된 a;b 파일을 쉼표 설정으로 읽으면 {"a;b":"1;2"}처럼 한 칸으로 뭉쳐 나옵니다. 이 도구에서 JSON을 CSV로 바꿔 내려받는 파일에는 맨 앞에 3바이트짜리 표식(BOM)이 붙어 있어, 엑셀에서 더블클릭으로 열어도 한글이 깨지지 않습니다.
메모장은 파일 인코딩을 자동 감지하지만, 엑셀은 CSV를 더블클릭으로 열 때 한국어 윈도우 기본 인코딩(CP949/EUC-KR)으로 가정하기 때문입니다. 요즘 웹에서 내려받는 CSV는 대부분 UTF-8이라서, 엑셀이 UTF-8 바이트를 EUC-KR로 잘못 해석하면 한글이 외계어처럼 깨집니다. 파일 자체는 멀쩡하므로 올바른 인코딩으로 다시 열기만 하면 됩니다.
BOM(Byte Order Mark)은 파일 맨 앞에 붙는 보이지 않는 3바이트 표식(EF BB BF)으로, '이 파일은 UTF-8'이라고 알려 주는 역할을 합니다. 엑셀은 CSV를 열 때 BOM이 있으면 UTF-8로 정확히 읽고, 없으면 시스템 기본 인코딩으로 가정해 깨집니다. 그래서 'UTF-8(BOM)'으로 저장하면 더블클릭만으로도 한글이 멀쩡하게 열립니다. 단, 일부 개발 도구는 BOM을 데이터로 오인하므로 프로그램에 넘길 파일에는 BOM 없는 UTF-8이 안전합니다.
아니요, 그건 엑셀의 자동 형식 변환 때문입니다. 엑셀은 CSV의 모든 값을 숫자·날짜로 해석하려고 시도해서, 010-1234가 앞의 0이 사라진 숫자가 되거나 1-2 같은 값이 1월 2일로 바뀝니다. 더블클릭 대신 데이터 탭의 '텍스트/CSV에서 가져오기'로 열면서 해당 열의 형식을 '텍스트'로 지정하면 원본 그대로 유지됩니다. 인코딩 문제와 형식 변환 문제는 원인이 달라 처방도 다릅니다.