CSV 파일이 UTF-8로 저장됐는데 맨 앞에 BOM이 없으면, 엑셀은 파일을 한국어 윈도우의 기본 문자 코드(코드 페이지 949)로 읽어요. 같은 바이트를 다른 규칙으로 읽으니 '안녕하세요'가 '�븞�뀞�븯�꽭�슂' 같은 글자로 깨져요. 해결법은 두 가지예요. 파일을 UTF-8 BOM으로 다시 저장하거나, 엑셀의 데이터 › 텍스트/CSV에서로 가져오면서 파일 원본을 UTF-8(65001)로 고르면 돼요.
한글이 깨지는 원리
컴퓨터는 글자를 바이트(숫자)로 저장하고, 어떤 숫자가 어떤 글자인지는 '인코딩' 규칙이 정해요. 한글을 저장하는 대표적인 규칙이 두 가지예요.
| UTF-8 | 코드 페이지 949 (한국어 윈도우 기본) | |
|---|---|---|
| '안' 한 글자 | EC 95 88 (3바이트) | BE C8 (2바이트) |
| '안녕하세요' 다섯 글자 | 15바이트 | 10바이트 |
| 쓰이는 곳 | 웹 서비스, 데이터 내보내기, 개발 도구 대부분 | 오래된 윈도우 프로그램, 엑셀의 기본 CSV 읽기 |
UTF-8에서 한글 한 글자는 3바이트예요(유니코드 U+0800~U+FFFF 범위는 3바이트로 저장돼요). 이 15바이트를 949 규칙으로 2바이트씩 끊어 읽으면 전혀 다른 글자 조합이 나와서, 위에서 본 것처럼 깨진 글자가 돼요. 데이터가 망가진 게 아니라 읽는 규칙이 틀린 거라서, 규칙만 맞춰 주면 원래대로 보여요.
엑셀은 인코딩을 어떻게 판단할까요
마이크로소프트는 BOM(바이트 순서 표시)과 함께 저장된 UTF-8 CSV는 엑셀에서 그냥 열 수 있다고 안내해요. BOM은 파일 맨 앞에 붙는 EF BB BF 세 바이트로, '이 파일은 UTF-8'이라는 표시예요.
엑셀의 가져오기 기능(파워 쿼리)도 마찬가지예요. 마이크로소프트 문서에 따르면 문자 집합은 자동으로 추론되지 않고, UTF-8은 파일이 UTF-8 BOM으로 시작할 때만 추론돼요. 그래서 웹사이트나 프로그램에서 내려받은 CSV가 BOM 없는 UTF-8이면, 더블클릭으로 열었을 때 한글이 깨지는 거예요.
해결 1. 파일을 UTF-8 BOM으로 저장하기
여러 사람에게 보내는 파일이라면 이 방법이 가장 편해요. 받는 사람이 아무 설정 없이 더블클릭만 해도 한글이 제대로 보이니까요.
- JSON 데이터를 CSV로 만들 때는 CSV ↔ JSON 변환에서 'Excel용 CSV(UTF-8 BOM)' 옵션을 켜고 저장하세요.
- 직접 CSV를 내보내는 프로그램이나 서비스를 운영한다면, 파일 맨 앞에 EF BB BF를 붙여 저장하도록 바꾸면 돼요.
해결 2. 엑셀에서 '텍스트/CSV에서'로 가져오기
이미 받은 파일을 손대지 않고 열고 싶을 때 쓰는 방법이에요.
- 엑셀에서 빈 통합 문서를 열어요.
- 데이터 탭에서 텍스트/CSV에서를 눌러요. 버전에 따라 데이터 가져오기 › 파일에서 › 텍스트/CSV에서에 있어요.
- CSV 파일을 고르고 가져오기를 눌러요.
- 미리 보기 창 위쪽의 파일 원본 목록에서 65001번(유니코드 UTF-8)을 골라요. 미리 보기의 한글이 바로 제대로 보이면 성공이에요.
- 구분 기호가 쉼표(또는 세미콜론, 탭)로 맞게 잡혔는지 확인하고 로드를 눌러요.
같은 창에서 자료형 자동 감지를 끄면 모든 열이 텍스트로 들어와요. 010으로 시작하는 전화번호나 0으로 시작하는 우편번호처럼 앞자리 0이 사라지면 안 되는 데이터가 있을 때 유용해요.
BOM을 붙이지 않는 게 나을 때
BOM은 엑셀에는 도움이 되지만, BOM을 예상하지 않는 프로그램이나 스크립트는 첫 번째 머리글 앞에 보이지 않는 글자가 붙은 것처럼 읽을 수 있어요. 그러면 '이름'이라는 열을 찾지 못하는 식의 오류가 생겨요. 사람이 엑셀로 열어 볼 파일에는 BOM을 붙이고, 다른 프로그램이 읽을 파일에는 붙이지 않는 게 안전해요.
한눈에 정리
| 상황 | 할 일 |
|---|---|
| 받은 CSV를 엑셀에서 열었더니 한글이 깨져요 | 데이터 › 텍스트/CSV에서로 가져오며 파일 원본 65001(UTF-8) 선택 |
| 내가 만든 CSV를 다른 사람이 엑셀로 열어요 | UTF-8 BOM으로 저장 |
| CSV를 프로그램이나 스크립트가 읽어요 | BOM 없는 UTF-8로 저장 |
| 엑셀 파일을 CSV로 바꿔야 해요 | 엑셀 ↔ CSV 변환 사용 |