- 공유 링크 만들기
- X
- 이메일
- 기타 앱
이 글의 목적은 Windows와 macOS 환경에서 엑셀로 CSV 파일을 불러올 때 인코딩을 정확히 지정하여 한글 깨짐을 방지하고, Power Query와 텍스트 가져오기(레거시) 마법사, 자동 변환 옵션 제어, 대용량 처리 및 사전 변환까지 실무에서 바로 적용 가능한 절차를 제공하는 것이다.
1. CSV와 인코딩의 핵심 개념
CSV는 쉼표로 구분된 텍스트 레코드 파일 형식이다. 엑셀은 CSV를 열 때 파일의 인코딩 정보를 BOM(Byte Order Mark) 또는 사용자 선택값으로 해석한다. UTF-8, UTF-16LE, CP949(Windows-949), EUC-KR 등 인코딩이 다르면 동일한 바이트가 다른 글자로 해석되므로 한글이 물음표 또는 깨진 문자로 보일 수 있다.
| 인코딩 | 특징 | BOM | 한글 호환성 | 비고 |
|---|---|---|---|---|
| UTF-8 | 가변 길이 유니코드이다 | 있음/없음 모두 존재하다 | 매우 높다 | BOM 없으면 자동판단 실패 사례가 있다 |
| UTF-16LE | 2바이트 기본 유니코드이다 | 대개 있음 | 매우 높다 | 파일 크기가 커지는 경향이 있다 |
| CP949 | Windows 확장 완성형이다 | 없다 | 한국어 레거시에 매우 높다 | 기호·이모지 손실 가능성이 있다 |
| EUC-KR | KSC5601 기반이다 | 없다 | 보통이다 | 확장 문자 손실 가능성이 있다 |
2. Windows 엑셀: Power Query로 인코딩 지정하여 가져오기
Power Query는 엑셀 2016 이상과 Microsoft 365에서 기본 제공되며 인코딩 지정, 구분자, 데이터 형식 감지 제어가 가능하다.
- 엑셀을 열고 데이터 탭에서 텍스트/CSV에서 를 선택한다.
- CSV 파일을 선택한 후 미리보기 창에서 오른쪽 아래 데이터 변환 을 클릭한다.
- Power Query 편집기 상단의 홈 > 원본 설정 또는 쿼리 단계의 원본 옆 톱니바퀴 아이콘을 클릭한다.
- 파일 원본 (File Origin) 드롭다운에서 65001: UTF-8 , 949: Korean (ANSI/OEM - 한국어) 등 필요한 인코딩을 선택한다.
- 구분 기호 (Delimiter)를 지정한다. 쉼표가 기본이나, 세미콜론/탭/파이프 등 실제 파일과 일치시켜야 한다.
- 데이터 형식 감지 옵션을 형식 자동 감지 안 함 으로 두거나, 각 열 헤더의 형식을 텍스트 로 임시 지정한다. 날짜·우편번호·선행 0 손실 방지를 위해 권장한다.
- 닫기 및 로드 를 클릭하여 시트로 불러온다.
3. Windows 엑셀: 텍스트 가져오기(레거시) 마법사 활용
레거시 마법사는 파일 원본을 세밀하게 지정할 수 있어 특정 버전/배포 환경에서 안정적이다.
- 파일 > 옵션 > 데이터 로 이동한다.
- 레거시 데이터 마법사 표시 에서 텍스트에서(레거시) 를 체크한다.
- 데이터 탭에 추가된 텍스트/CSV에서(레거시) 또는 텍스트 파일 메뉴를 실행한다.
- 1단계: 원본 데이터 파일 형식 에서 구분 기호로 분리됨 을 선택한다.
- 2단계: 구분 기호 를 실제 파일과 일치하도록 체크한다. 연속 구분 기호로 처리 옵션은 불필요한 공백을 병합할 때만 사용한다.
- 하단 파일 원본 드롭다운에서 65001: 유니코드(UTF-8) 또는 949: 한글(Windows) 을 선택한다.
- 3단계: 각 열을 선택하고 열 데이터 형식 을 텍스트 또는 필요한 형식으로 지정한다.
- 마침 을 클릭해 원하는 위치에 배치한다.
4. macOS 엑셀: 텍스트 가져오기와 Power Query
macOS 최신 엑셀도 데이터 > 텍스트/CSV에서 를 제공한다. 미리보기에서 파일 원본 을 UTF-8 또는 한국어(Windows 949)로 수동 지정하고 변환 을 통해 Power Query로 이동한다. macOS에서는 지역 설정 영향으로 쉼표와 소수점 기호가 충돌할 수 있으므로 구분 기호를 명확히 지정해야 한다.
5. 자동 열 형식 변환과 데이터 손상 방지
CSV에는 스키마 정보가 없으므로 엑셀은 데이터를 임의로 숫자·날짜·불리언으로 해석한다. 다음 설정을 통해 데이터 손상을 예방한다.
- Power Query에서 형식 자동 감지 를 끄고, 모든 열을 텍스트 로 로드한 뒤 필요한 열만 형식을 변환한다.
- 레거시 마법사 3단계에서 열 데이터 형식 = 텍스트 를 명시한다.
- 우편번호, 제품코드, 카드 BIN, 대용량 식별자는 텍스트 유지가 원칙이다.
6. 구분자와 인용부호, 줄바꿈 처리
CSV의 핵심은 구분자와 인용부호 처리이다. 값 내부에 구분자나 줄바꿈이 포함되는 경우 큰따옴표로 감싸고 내부 큰따옴표는 이중으로 이스케이프한다.
"고객명","주소","메모" "홍길동","서울, 강남구","첫 방문 고객" "김철수","부산","메모 ""상담완료"" 기록"
Power Query와 레거시 마법사 모두 텍스트 한정자 로 큰따옴표를 기본 지원한다. 파일이 세미콜론 또는 탭을 사용한다면 해당 구분자를 선택해야 한다.
7. BOM과 자동 인코딩 인식
엑셀은 UTF-8 BOM이 있는 파일을 비교적 정확히 인식한다. 그러나 UTF-8 BOM 없이 저장된 CSV는 ANSI로 오인식되어 한글이 깨질 수 있다. 이 경우 가져오기 대화상자에서 인코딩을 수동 지정하거나, 사전 변환으로 BOM을 추가하면 안정적이다.
8. 인코딩 식별·변환을 위한 사전 처리 도구
사전 변환으로 엑셀 단계의 불확실성을 줄일 수 있다. 다음은 실무에서 검증된 방법이다.
8.1 Windows PowerShell
# CP949(ANSI) CSV를 UTF-8 with BOM으로 변환하다 Get-Content .\input_cp949.csv -Encoding Default | Set-Content .\output_utf8_bom.csv -Encoding UTF8
인코딩을 지정해 바로 엑셀로 가져갈 전처리이다
Import-Csv .\input_cp949.csv -Delimiter ',' -Encoding Default |
Export-Csv .\output_utf8_bom.csv -NoTypeInformation -Encoding UTF8
8.2 iconv(크로스플랫폼)
# CP949 → UTF-8 변환이다 iconv -f CP949 -t UTF-8 input.csv > output_utf8.csv
8.3 Python pandas
import pandas as pd # 읽기 df = pd.read_csv("input_cp949.csv", encoding="cp949", dtype=str) # 쓰기: UTF-8 with BOM로 저장하여 엑셀이 자동 인식하게 하다 df.to_csv("output_utf8_bom.csv", index=False, encoding="utf-8-sig")
9. 버전별 권장 절차 요약
| 환경 | 권장 경로 | 인코딩 지정 포인트 | 비고 |
|---|---|---|---|
| Excel 365/2019/2016 (Windows) | 데이터 > 텍스트/CSV에서 > 데이터 변환 | Power Query의 파일 원본에서 UTF-8/949 지정 | 형식 자동 감지 해제 권장이다 |
| Excel 2013/2010 (Windows) | 레거시 텍스트 가져오기 마법사 | 파일 원본에서 65001/949 선택 | 열별 텍스트 지정으로 손상 방지하다 |
| Excel (macOS) | 데이터 > 텍스트/CSV에서 > 변환 | 파일 원본 드롭다운에서 UTF-8/한국어 | 구분자 재확인 필요하다 |
10. 한글 깨짐 유형별 진단 트리
- 한글이 물음표(?)로 보이면: 소스가 CP949인데 UTF-8로 열었을 가능성이 높다. 949 로 재시도한다.
- 한글이 ã„· 같은 문자로 보이면: UTF-8을 ANSI로 해석했다. UTF-8 로 재지정하거나 BOM을 추가한다.
- 일부 이모지·특수문자가 □로 보이면: CP949로는 표현 불가하다. UTF-8 로 변환 후 가져온다.
- 숫자가 1.23457E+11로 바뀌면: 자동 형식 감지에 의한 지수표기이다. 텍스트로 들여온 후 서식을 지정한다.
- 날짜가 바뀌면: 지역 설정과 자동 변환 영향이다. 텍스트로 들여오고 변환 함수를 사용한다.
11. 날짜·숫자·코드 안전하게 다루기
다음 패턴은 텍스트로 유지 후 필요 시 수식으로 변환한다.
- 선행 0이 있는 코드: 00123, 0000456789 등
- 하이픈 포함 코드: 12-34, A-0001 등
- 연·월만 있는 날짜: 2024-01, 2025/03 등
- 길이가 15자 이상인 숫자 식별자
-- 텍스트로 들여온 yyyyMMdd를 날짜로 변환하다 =DATEVALUE(TEXT(A2,"0")) -- 또는 =DATE(LEFT(A2,4), MID(A2,5,2), RIGHT(A2,2))
12. 대용량 CSV 성능 팁
- Power Query로 증분 로드하고 불필요한 열을 초기 단계에서 제거한다.
- 필터·정렬은 Power Query 단계에서 수행하여 시트 연산량을 줄인다.
- CSV를 여러 파일로 분할 후 폴더에서 커넥터로 병합한다.
- 필요 시 64비트 엑셀을 사용한다.
13. 실무 체크리스트
| 항목 | 체크 방법 | 권장 설정 |
|---|---|---|
| 인코딩 | Power Query 파일 원본 확인 | UTF-8 우선, 레거시는 949 |
| BOM | 사전 변환 결과 검토 | UTF-8-SIG 권장이다 |
| 구분자 | 미리보기 열 분리 상태 확인 | 쉼표/세미콜론/탭 일치 |
| 텍스트 열 | 열 아이콘·형식 확인 | 코드·우편번호 텍스트 고정 |
| 특수문자 | 샘플 레코드 검증 | 이모지 필요 시 UTF-8 |
14. 반복 작업 자동화(선택)
동일 포맷의 CSV를 주기적으로 받는다면 쿼리를 저장하여 재사용한다. 인코딩·구분자·열 형식 로직을 고정해 오류를 줄일 수 있다. 소스 파일 경로만 바꾸면 재로딩이 가능하다.
15. 문제 해결 사례별 절차
| 증상 | 원인 | 조치 |
|---|---|---|
| 한글이 물음표로 출력 | CP949를 UTF-8로 해석 | 파일 원본을 949로 변경하여 재가져오기 |
| 한글이 ã… 형태 깨짐 | UTF-8을 ANSI로 오인식 | UTF-8로 지정 또는 UTF-8-SIG로 변환 |
| 열이 밀림 | 구분자 불일치 또는 인용부호 누락 | 구분자 재설정, 텍스트 한정자 확인, 원본 수정 |
| 날짜 잘못 변환 | 자동 형식 감지 | 텍스트로 로드 후 수식 변환 |
| 코드 앞 0 손실 | 숫자 자동 인식 | 열 형식을 텍스트로 강제 |
FAQ
CSV를 더블클릭으로 열면 왜 자꾸 깨지나?
더블클릭은 엑셀의 자동 인식을 사용하므로 인코딩을 지정할 수 없다. 엑셀 실행 후 데이터 탭에서 텍스트/CSV 가져오기를 사용해야 한다.
UTF-8과 UTF-8-SIG의 차이는 무엇인가?
UTF-8-SIG는 BOM을 포함해 애플리케이션이 UTF-8임을 쉽게 인식하게 한다. 엑셀이 자동 인식을 실패하는 환경에서 유리하다.
CP949와 EUC-KR 중 무엇을 선택해야 하나?
국내 레거시 윈도우 환경에서 CP949 호환성이 높다. EUC-KR은 확장 문자에서 손실 가능성이 있다.
세미콜론으로 구분된 CSV도 처리 가능한가?
가능하다. 구분 기호를 세미콜론으로 지정하면 된다. 지역 설정에 따라 기본 구분 기호가 달라질 수 있으므로 항상 미리보기에서 열 분리 상태를 확인한다.
대용량 CSV를 빠르게 여는 방법은?
Power Query로 필요한 열만 로드하고, 폴더 커넥터로 분할 파일을 병합한다. 64비트 엑셀 사용을 권장한다.
CSV 안의 큰따옴표가 두 번씩 나오는 이유는?
텍스트 안의 큰따옴표를 표현하기 위한 이스케이프 규칙이다. 파싱 시 정상 동작이며 데이터 자체 오류가 아니다.
날짜가 자동으로 바뀌지 않게 하려면?
가져오기 단계에서 형식 자동 감지를 끄고 모든 열을 텍스트로 로드한 뒤 필요한 열만 날짜로 변환한다.