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에서'로 가져오기

이미 받은 파일을 손대지 않고 열고 싶을 때 쓰는 방법이에요.

  1. 엑셀에서 빈 통합 문서를 열어요.
  2. 데이터 탭에서 텍스트/CSV에서를 눌러요. 버전에 따라 데이터 가져오기 › 파일에서 › 텍스트/CSV에서에 있어요.
  3. CSV 파일을 고르고 가져오기를 눌러요.
  4. 미리 보기 창 위쪽의 파일 원본 목록에서 65001번(유니코드 UTF-8)을 골라요. 미리 보기의 한글이 바로 제대로 보이면 성공이에요.
  5. 구분 기호가 쉼표(또는 세미콜론, 탭)로 맞게 잡혔는지 확인하고 로드를 눌러요.

같은 창에서 자료형 자동 감지를 끄면 모든 열이 텍스트로 들어와요. 010으로 시작하는 전화번호나 0으로 시작하는 우편번호처럼 앞자리 0이 사라지면 안 되는 데이터가 있을 때 유용해요.

BOM을 붙이지 않는 게 나을 때

BOM은 엑셀에는 도움이 되지만, BOM을 예상하지 않는 프로그램이나 스크립트는 첫 번째 머리글 앞에 보이지 않는 글자가 붙은 것처럼 읽을 수 있어요. 그러면 '이름'이라는 열을 찾지 못하는 식의 오류가 생겨요. 사람이 엑셀로 열어 볼 파일에는 BOM을 붙이고, 다른 프로그램이 읽을 파일에는 붙이지 않는 게 안전해요.

한눈에 정리

상황할 일
받은 CSV를 엑셀에서 열었더니 한글이 깨져요데이터 › 텍스트/CSV에서로 가져오며 파일 원본 65001(UTF-8) 선택
내가 만든 CSV를 다른 사람이 엑셀로 열어요UTF-8 BOM으로 저장
CSV를 프로그램이나 스크립트가 읽어요BOM 없는 UTF-8로 저장
엑셀 파일을 CSV로 바꿔야 해요엑셀 ↔ CSV 변환 사용

출처