엑셀 텍스트 가져오기 인코딩 오류 완벽 해결 가이드

이 글의 목적은 엑셀에서 CSV·TXT 등 텍스트 데이터를 가져올 때 발생하는 인코딩 깨짐을 원인별로 분석하고, 윈도우·macOS, 32/64비트, 레거시 마법사·Power Query별 실무 해결 절차와 자동화 스크립트까지 제공하여 현장에서 즉시 적용 가능하도록 돕는 것이다.

1. 인코딩이란 무엇이며 왜 깨지는가

인코딩은 문자를 바이트로 변환하는 규칙을 의미하며, 디코딩은 바이트를 문자로 되돌리는 규칙을 의미한다. 텍스트 파일을 저장할 때 사용한 인코딩과 엑셀이 불러올 때 가정하는 인코딩이 일치하지 않으면 글자가 깨진다. 특히 한국어 환경에서는 EUC-KR(또는 CP949)과 UTF-8 간 불일치가 빈번하다. UTF-8 BOM 유무 또한 자동 감지 결과에 영향을 준다.

형식 특징 장점 주의사항
UTF-8 with BOM 파일 맨 앞 3바이트(0xEF BB BF)로 UTF-8 표시가 있다 엑셀이 UTF-8을 비교적 안정적으로 감지한다 일부 시스템에서 BOM이 예상치 못한 토큰으로 해석될 수 있다
UTF-8 (BOM 없음) 표시 바이트가 없다 대부분의 서비스·리눅스 도구와 호환이 좋다 엑셀 자동열기에서 ANSI로 오인하여 한글이 깨질 수 있다
EUC-KR/CP949 MS 한글 코드페이지 국내 레거시 시스템과 호환성이 높다 이모지·확장 한자 등은 표현 불가하다
UTF-16LE 2바이트 단위 인코딩 레거시 윈도우 메모장에서 기본으로 사용되었다 CSV 등 다른 도구에서 비호환 가능성이 있다
주의 : 엑셀에서 파일을 더블클릭으로 바로 열면 자동 인코딩 추정이 적용되며, 이 경우 UTF-8(BOM 없음) 파일이 ANSI로 오인되어 한글이 물음표나 깨진 문자로 보일 수 있다. 반드시 가져오기 마법사 또는 Power Query 경로를 사용하여 인코딩을 명시하는 것이 안전하다.

2. 가장 안전한 원칙

  • 가능하면 UTF-8로 통일하여 저장한다.
  • 엑셀에서 자동열기를 피하고, 가져오기 경로에서 인코딩을 명시한다.
  • 구분자는 쉼표(,)·탭(\t)·세미콜론(;) 등 실제 파일과 일치시키고, 텍스트 한정자(예: ")를 확인한다.
  • 열 데이터 형식(일반·텍스트·날짜)을 가져오기 단계에서 지정한다.

3. 방법 A: Power Query(데이터 > 데이터 가져오기)로 인코딩 지정

Power Query는 엑셀 2016 이후 기본 제공되며, 대용량·반복 자동화에 적합하다.

  1. 데이터 > 데이터 가져오기 > 텍스트/CSV에서 파일을 선택한다.
  2. 미리보기 창 오른쪽 파일 원본 드롭다운에서 65001: Unicode(UTF-8) 또는 949: 한국어(Windows) 를 선택한다.
  3. 구분 기호(Comma, Tab 등)와 데이터 형식을 확인하고 데이터 변환 을 눌러 편집기에서 열별 형식을 지정한다.
  4. 닫기 및 로드 를 눌러 시트나 데이터 모델로 로드한다.
상황 권장 파일 원본(인코딩) 구분 기호 비고
UTF-8 CSV(웹·API 산출) 65001: Unicode(UTF-8) Comma BOM 유무와 무관하게 지정한다
국내 레거시 시스템 CSV 949: 한국어(Windows) Comma 숫자 앞 0 보존 시 열 형식을 텍스트로 지정한다
탭 구분 TXT 해당 인코딩 선택 Tab 열 머리글 자동감지 여부 확인

3.1 Power Query 고급 스크립트(M)로 인코딩 강제

파일 원본 드롭다운이 기대대로 동작하지 않는 환경에서는 M 스크립트로 인코딩 코드를 강제할 수 있다.

  
let 소스 = Csv.Document( File.Contents("C:\data\sample.csv"), [ Delimiter=",", Columns=8, Encoding=65001, // UTF-8 QuoteStyle=QuoteStyle.Csv ] ), 표 = Table.PromoteHeaders(소스, [PromoteAllScalars=true]) in 표 
  

주요 코드값은 65001(UTF-8), 949(한국어 Windows), 1200(UTF-16LE)이다.

4. 방법 B: 레거시 텍스트 가져오기 마법사로 인코딩 지정

엑셀에서 마법사가 보이지 않으면 파일 > 옵션 > 데이터 에서 레거시 가져오기 마법사 표시 를 켠다.

  1. 데이터 > 레거시 마법사 > 텍스트 파일에서 를 선택한다.
  2. 원본 파일 에서 65001 : Unicode(UTF-8) 또는 949 : 한국어(Windows) 를 선택한다.
  3. 구분된 또는 고정 너비 를 선택하고, 구분 기호와 텍스트 한정자를 맞춘다.
  4. 열 데이터 형식을 열별로 텍스트 · 날짜(YYYY-MM-DD) · 일반 으로 지정한다.
주의 : 주민등록번호·우편번호·제품코드처럼 선행 0이 있는 값은 열 형식을 반드시 텍스트로 지정한다. 그렇지 않으면 00123이 123으로 변환된다.

5. 방법 C: 메모장/에디터로 사전 변환 후 열기

현장에서 파일 공급처가 다양할 때, 엑셀 이전 단계에서 UTF-8로 통일하는 것도 유효하다.

  • 메모장으로 열기 > 다른 이름으로 저장 > 인코딩: UTF-8 로 저장한다.
  • VS Code에서는 우하단 인코딩 표시 클릭 > Save with Encoding > UTF-8 을 선택한다.

6. 방법 D: VBA로 인코딩 지정 가져오기 자동화

반복 작업을 자동화하려면 VBA의 Workbooks.OpenText 를 사용한다.

  
Sub ImportCsvUtf8() Dim f As String f = "C:\data\sample.csv" Workbooks.OpenText _ Filename:=f, _ Origin:=65001, _ 'UTF-8 DataType:=xlDelimited, _ TextQualifier:=xlTextQualifierDoubleQuote, _ ConsecutiveDelimiter:=False, _ Comma:=True, Tab:=False, Semicolon:=False, _ Local:=False '시스템 로캘 무시 End Sub 
  

CP949 파일은 Origin:=949 로 변경한다.

7. 대용량·배치 처리 시 팁

  • Power Query로 가져와서 쿼리만 로드 후 피벗이나 모델에서 처리한다.
  • 파일명이 날마다 바뀌면 Folder.Files 와 필터를 활용하여 최신 파일만 참조한다.
  • 구분자 안에 쉼표가 포함된 텍스트 필드는 반드시 쌍따옴표로 감싼다.

8. 윈도우 vs macOS 환경 차이

항목 Windows macOS 대응
자동열기 인코딩 추정 ANSI로 오인 가능성이 높다 UTF-8 인식이 상대적으로 안정적이다 양쪽 모두 가져오기 경로로 명시 지정한다
레거시 마법사 옵션에서 활성화 가능하다 제한적이다 Power Query를 우선 사용한다
파일명 한글 대체로 문제없다 구버전에서 경로 인식 이슈가 있다 영문 경로 사용을 권장한다

9. CSV 저장 시 올바른 인코딩 선택

엑셀에서 파일 > 다른 이름으로 저장 시 아래 형식을 구분한다.

형식 설명 인코딩 권장 사용처
CSV UTF-8(쉼표로 분리) 엑셀 기본 UTF-8 저장 UTF-8(BOM 포함) 대부분의 웹서비스·DB 업로드
CSV(쉼표로 분리) 시스템 로캘 기준 보통 ANSI/CP949 레거시 국내 시스템
텍스트(탭으로 분리) TSV 로캘 기준 ETL·로그형 데이터
주의 : 외부 시스템이 UTF-8(BOM 없음)만 허용하는 경우가 있다. 이때는 전용 에디터로 BOM을 제거하거나 스크립트를 사용한다.

10. PowerShell로 BOM 제거·변환

윈도우에서 대량 파일을 UTF-8(BOM 없음)으로 변환한다.

  
# 폴더 내 모든 CSV를 UTF-8(BOM 없음)으로 변환 Get-ChildItem "C:\data" -Filter *.csv | ForEach-Object { $t = Get-Content $_.FullName Set-Content -Path $_.FullName -Value $t -Encoding utf8 } 
  

-Encoding utf8 은 BOM 없는 UTF-8을 생성한다. BOM이 필요한 경우 utf8BOM 을 사용한다.

11. 흔한 문제와 실무 해결 패턴

  • 한글이 ???로 보임 : 파일은 UTF-8인데 자동열기로 ANSI로 인식된 경우이다. Power Query에서 65001로 지정하여 다시 가져온다.
  • 이모지·특수문자 소실 : CP949로 저장된 데이터이다. 원본 재수집 또는 UTF-8로 변환 후 다시 가져온다.
  • 열이 밀림 : 텍스트 내부의 쉼표가 한정자 없이 포함되었다. 소스에서 해당 필드를 쌍따옴표로 감싸도록 요구하거나, Power Query에서 QuoteStyle.Csv 로 처리한다.
  • 날짜가 숫자/텍스트로 고정 : 가져오기 시 열 형식을 날짜로 지정하거나, 변환 단계에서 형식 변경 을 적용한다.

12. 체크리스트

항목 점검 방법 통과 기준
원본 인코딩 파악 에디터 상태바 확인 UTF-8 또는 CP949로 식별
가져오기 경로 사용 Power Query/마법사 사용 자동열기 미사용
인코딩 명시 65001/949 지정 깨짐 없음
구분자·한정자 쉼표·탭·쌍따옴표 확인 열 밀림 없음
열 형식 텍스트·날짜 지정 선행 0·형식 보존
재현 자동화 쿼리 저장·VBA 원클릭 재로딩

13. 표준 운영 절차(SOP) 예시

  
1) 파일 수신 즉시 VS Code로 열어 인코딩·구분자 확인
2) 엑셀 > 데이터 > 텍스트/CSV에서 > 파일 원본=65001 또는 949 지정
3) 미리보기에서 열 제목·형식 확인 후 데이터 변환
4) Power Query 편집기에서 형식 지정(텍스트/날짜) 및 불필요 열 제거
5) 닫기 및 로드 > 로드 대상 선택(시트/데이터 모델)
6) 쿼리 속성에서 새로 고침 설정(파일 교체 시 자동 적재) 
  

14. 샘플 데이터와 테스트

아래와 같은 레코드를 준비하여 각 인코딩으로 저장해 테스트하면 현장 적용 전에 리스크를 줄일 수 있다.

  
id,name,desc,price,created_at 00012,가나다,"쉼표, 포함된 설명",12000,2024-01-31 00013,테스트,"따옴표 ""중복"" 처리",0,2024-02-01 
  

15. 문제 원인 트러블슈팅 트리

  1. 파일을 에디터로 열어 인코딩 확인한다.
  2. 엑셀에서 가져오기 경로를 사용하여 동일 인코딩을 지정한다.
  3. 깨짐 지속 시 다른 인코딩으로 시도한다(UTF-8↔CP949).
  4. 여전히 문제면 구분자·한정자·열 형식을 점검한다.
  5. 대량·반복이라면 Power Query 또는 VBA 자동화를 도입한다.

FAQ

CSV를 더블클릭으로 열면 깨지는데 해결 방법은 무엇인가?

더블클릭 자동열기를 중단하고, 엑셀에서 데이터 > 텍스트/CSV에서를 통해 인코딩을 명시하여 가져오는 것이 해결책이다.

UTF-8 파일인데 일부만 깨지는 이유는 무엇인가?

파일 내 특정 행에 한정자 누락이나 잘못된 구분자가 섞여 있으면 열 정렬이 틀어져 일부 필드만 깨져 보일 수 있다. 해당 필드를 따옴표로 감싸거나 Power Query에서 인코딩과 QuoteStyle을 지정한다.

공급받는 시스템이 CP949만 지원한다. 어떻게 해야 하나?

원본을 UTF-8로 관리하되 제공 직전에 CP949로 변환한다. 변환 후 표현 불가능한 문자가 있는지 점검한다.

날짜가 텍스트로 들어와 계산이 안 된다. 어떻게 처리하나?

가져오기 단계에서 해당 열을 날짜 형식으로 지정하거나, Power Query에서 형식 변경을 적용한다. 이미 로딩된 경우 TEXT/DATE 변환 함수를 사용한다.

선행 0이 사라진다. 왜 그런가?

일반 또는 숫자 형식으로 로딩되어 수치로 해석되었기 때문이다. 가져오기 시 열 형식을 텍스트로 지정한다.