엑셀에서 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를 더블클릭으로 열 때 한국어 윈도우 기본 인코딩(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에서 가져오기'로 열면서 해당 열의 형식을 '텍스트'로 지정하면 원본 그대로 유지됩니다. 인코딩 문제와 형식 변환 문제는 원인이 달라 처방도 다릅니다.