데이터 응급실 안내한글이 깨질 때

CSV 문제 해결 가이드

CSV 한글 깨짐, 변환 전에 원인부터 확인하는 법

Excel이나 코드에서 CSV 한글이 깨질 때 UTF-8, BOM, CP949를 무작정 바꾸지 않고 원본 바이트와 가져오기 설정을 확인하는 순서를 설명합니다.

최초 작성 2026년 8월 29일마지막 검토 2026년 8월 29일원본 보존 우선
CSV한글 깨짐UTF-8CP949

CSV를 열었을 때 ¾È³ç처럼 보인다면 글꼴 문제가 아니라 같은 바이트를 다른 문자 인코딩으로 해석했을 가능성이 큽니다. 반면 이미 ??? 또는 ���로 저장된 파일은 이전 과정에서 원래 글자가 사라졌을 수도 있습니다. 두 상황은 화면만 보고 같은 방식으로 고치면 안 됩니다.

가장 먼저 할 일은 변환 버튼을 누르는 것이 아니라 원본을 복사해 보존하는 것입니다. 인코딩을 잘못 선택한 채 다시 저장하면 아직 남아 있던 원본 바이트까지 잃을 수 있습니다.

먼저 세 가지를 구분하세요

1. 프로그램이 파일을 잘못 읽은 경우

파일의 바이트는 정상인데 Excel이나 코드가 다른 인코딩을 선택한 상황입니다. 올바른 인코딩으로 다시 열면 원문을 복구할 수 있습니다. 흔한 예는 CP949로 저장된 파일을 UTF-8로 읽거나, UTF-8 파일을 오래된 Excel 환경에서 시스템 기본 문자셋으로 여는 경우입니다.

2. 변환 과정에서 대체 문자가 저장된 경우

원래 문자를 표현하지 못해 ? 또는 로 치환된 파일입니다. 이 문자는 원래 무엇이었는지 정보를 담고 있지 않습니다. 주변 문맥으로 추측할 수는 있어도 인코딩 변환만으로 항상 복구할 수는 없습니다.

3. CSV 구조도 함께 깨진 경우

한글이 정상으로 보여도 쉼표, 따옴표, 줄바꿈이 잘못되어 행마다 열 수가 달라질 수 있습니다. 인코딩 문제와 표 구조 문제는 별도로 검사해야 합니다.

UTF-8 BOM은 별도 인코딩이 아닙니다

UTF-8 BOM은 UTF-8 파일 맨 앞에 붙는 세 바이트 EF BB BF입니다. 일부 프로그램은 이 표시를 보고 UTF-8임을 판단합니다. BOM이 없다고 UTF-8이 아닌 것은 아니며, BOM을 붙였다고 손상된 본문이 복구되는 것도 아닙니다.

따라서 다음처럼 판단해야 합니다.

관찰 알 수 있는 것 아직 알 수 없는 것
UTF-8 BOM 발견 작성 프로그램이 UTF-8 표시를 붙였음 본문 전체가 손상 없이 유효한지
UTF-8 엄격 디코딩 성공 모든 바이트가 UTF-8 규칙에 맞음 작성자가 실제로 의도한 인코딩인지
CP949 계열 디코딩 성공 해당 바이트를 CP949 표에 매핑할 수 있음 CP949와 EUC-KR 중 정확히 어느 저장 옵션이었는지
발견 파일 안에 대체 문자가 존재함 원래 글자가 무엇이었는지

안전한 확인 순서

  1. 원본 파일을 복사하고 복사본으로 작업합니다.
  2. 파일 맨 앞의 BOM과 전체 바이트가 UTF-8 규칙에 맞는지 확인합니다.
  3. UTF-8이 아니라면 CP949 계열 후보를 비교합니다.
  4. 두 후보가 모두 유효하지만 결과가 다르면 자동 확정하지 말고 한글 미리보기를 직접 확인합니다.
  5. 글자가 정상으로 보인 뒤 쉼표·탭·세미콜론 후보와 행별 열 수를 검사합니다.
  6. 결과를 저장하기 전에 앞자리 0, 긴 번호, 날짜 같은 코드가 Excel에서 변형될 위험을 확인합니다.

?가 보인다는 이유만으로 CP949를 UTF-8로 변환하면 된다고 단정할 수 없습니다. 먼저 파일 자체에 그 문자가 저장돼 있는지 확인해야 합니다.

Excel에서는 파일을 바로 열지 마세요

CSV를 더블클릭하면 Excel이 인코딩과 각 열의 데이터 형식을 자동 추정합니다. 한글뿐 아니라 00123의 앞자리 0, 16자리 이상의 식별번호, 1-2 같은 코드도 바뀔 수 있습니다.

가능하면 Excel의 데이터 → 텍스트/CSV에서 가져오기 흐름을 사용하고 다음을 미리보기에서 확인하세요.

  • 파일 원본 또는 문자 인코딩
  • 구분자
  • 전화번호·우편번호·상품 코드 열의 텍스트 형식
  • 날짜처럼 보이지만 실제로는 코드인 열
  • 첫 행, 중간 행, 마지막 행의 열 수

Microsoft의 UTF-8 CSV 열기 안내도 Excel의 가져오기 기능을 통한 방법을 설명합니다.

코드에서 읽을 때도 후보를 무작정 순회하지 마세요

Python pandas.read_csv()에서 encoding='utf-8', encoding='cp949', encoding='euc-kr'를 오류가 사라질 때까지 바꾸는 방법은 빠르지만 충분하지 않습니다. 오류가 사라졌다는 사실은 바이트를 어떤 문자로든 매핑했다는 뜻일 뿐, 원문이 맞다는 증거가 아닐 수 있습니다.

또한 errors='ignore'나 대체 문자 허용 옵션은 손상 위치를 숨길 수 있습니다. 업무 데이터라면 엄격하게 실패하게 두고 첫 실패 바이트, 후보 미리보기, 행별 열 수를 함께 확인하는 편이 안전합니다.

실제 UnicodeDecodeError, ParserError, EmptyDataError 메시지를 단계별로 구분하려면 pandas CSV 오류 가이드를 이어서 확인하세요. 한글은 정상인데 모든 값이 한 열에 들어간다면 CSV 구분자 진단 가이드가 더 직접적인 출발점입니다.

CSV 파일 진단 도구가 보여 주는 것

CSV 파일 진단 도구는 다음 정보를 구분해 표시합니다.

  • 관찰: BOM, 파일 크기, 행별 실제 열 수, 줄바꿈 종류
  • 후보: UTF-8 또는 CP949 계열, 쉼표·탭·세미콜론·파이프 구분자
  • 사용자 선택: 둘 이상의 후보가 유효하고 결과가 다를 때
  • 위험 경고: 앞자리 0, 16자리 이상 정수, 날짜 유사 문자열, 수식 접두 문자

UTF-16/32 BOM은 발견할 수 있지만 현재 본문을 디코딩하지 않습니다. 인코딩이 확정된 파일은 사용자가 직접 버튼을 누른 경우에만 UTF-8 BOM 또는 무BOM 사본을 만들 수 있습니다. 이 사본은 구분자·따옴표·셀 값과 Excel 위험을 고치지 않으며 원본을 덮어쓰지 않습니다. 자세한 판단 기준과 지원 범위는 CSV 파일 진단 도구 작동 방식에서 확인할 수 있습니다.

마지막 확인

변환된 파일을 받았다고 작업이 끝난 것은 아닙니다. 최소한 다음을 원본과 대조하세요.

  • 총 행 수와 열 수
  • 한글 이름이나 주소의 대표 값
  • 앞자리 0이 있는 전화번호·우편번호
  • 긴 주문번호나 식별번호의 마지막 자리
  • 쉼표와 줄바꿈이 들어간 메모 필드
  • 데이터가 없거나 중복된 헤더

CSV는 서식 정보를 저장하지 않는 텍스트 형식입니다. 원본이 XLSX였다면 원본 통합 문서도 별도로 보관하세요.