엑셀을 CSV로 저장할 때 깨진 글자 없이: UTF-8, BOM, 구분자
CSV 파일의 글자 깨짐 대부분은 인코딩이 맞지 않아서 생겨요. 파일은 UTF-8로 저장했는데 윈도우 인코딩으로 열리는 경우죠. 시트를 CSV UTF-8로 내보내고, 엑셀로 열 예정이라면 BOM(바이트 순서 표시)을 붙이세요. 그리고 받는 프로그램이 기대하는 구분자를 고르세요. 내보내기 전에 우편번호나 전화번호 같은 열은 텍스트 서식으로 바꿔 두면 앞의 0이 유지돼요.
엑셀 CSV 변환CSV가 필요한데 엑셀 파일이 있어요무료로 사용하기왜 "é"가 "é"로 바뀔까요?
파일 속 글자는 바이트로 저장돼요. UTF-8에서 글자 é는 C3와 A9, 두 바이트예요. 이 바이트를 흔한 윈도우 인코딩인 Windows-1252로 읽는 프로그램은 C3를 Ã, A9를 ©로 보게 돼요. 그래서 "café"가 "café"로 나타나요. 직접 확인할 수도 있어요. é를 UTF-8로 인코딩한 뒤 Windows-1252로 디코딩하면 é가 나와요. ü, ñ, ö도 같은 방식으로 깨져요.
해결책은 글자를 고치는 게 아니에요. 파일이 어떤 인코딩인지 프로그램에 알려 주는 거예요.
UTF-8과 BOM
UTF-8은 웹과 대부분의 최신 소프트웨어에서 쓰는 표준 인코딩이에요. 일반 CSV 파일에는 어떤 인코딩을 쓰는지 알려 주는 필드가 없어서, 프로그램이 추측해야 해요. BOM은 파일 맨 앞에 붙는 세 바이트 EF BB BF로, 이를 확인하는 프로그램에 UTF-8이라고 알려 줘요. 윈도우의 엑셀은 BOM이 없는 UTF-8 파일을 자기 로컬 인코딩으로 여는 경우가 많아서, BOM을 붙이는 게 흔한 해결책이에요.
최근 버전의 엑셀에서는 다른 이름으로 저장 메뉴에 CSV UTF-8 옵션이 있고, 이 옵션은 BOM을 붙여요. 데이터 > 텍스트/CSV에서 가져오면서 파일 원본을 65001(UTF-8)로 지정할 수도 있어요. BOM에는 단점이 하나 있어요. BOM을 예상하지 않는 프로그램은 이를 첫 번째 열 이름의 일부로 읽을 수 있어요. 대부분의 파서와 스프레드시트 프로그램은 잘 처리하지만, 데이터 가져오기 도구가 이상한 머리글을 보고하면 BOM을 제거하세요.
쉼표 또는 세미콜론
CSV는 쉼표로 구분된 값(comma-separated values)을 뜻하고, RFC 4180 명세도 쉼표로 구분된 필드를 설명해요. 1,5를 1.5 대신 쓰는 소수점 쉼표 국가가 많은데, 이런 나라에서는 엑셀의 목록 구분자가 세미콜론인 경우가 많아요. 이때 쉼표로 구분된 파일을 엑셀에서 열면 엉망으로 나뉠 수 있고, 1,5 같은 숫자가 필드 두 개로 쪼개져요.
받는 프로그램이 기대하는 구분자를 고르세요. 엑셀 CSV 변환 도구는 쉼표, 세미콜론, 탭을 제공해요. 파일을 소수점 쉼표를 쓰는 환경의 프로그램에서 쓸 거라면 보통 세미콜론이 더 안전해요.
날짜가 일련번호가 돼요
엑셀은 날짜를 기준점부터 센 일련번호로 저장해요. 1900 날짜 체계에서는 1900년 1월 1일이 일련번호 1이에요. 엑셀은 1900년을 윤년으로 취급해서, 실제로는 없었던 1900년 2월 29일을 일련번호 60으로 세요. 그래서 1900년 3월 1일이 일련번호 61이 되고, 이후 모든 날짜가 하루씩 밀려요. 이 버그는 Lotus 1-2-3에서 시작됐고, 마이크로소프트는 호환성을 위해 같은 체계를 유지해 왔어요. 다른 소프트웨어는 1900년 3월 1일 이전의 날짜를 하루 차이로 읽을 수 있어요.
날짜를 내보내면 2023-01-01 대신 44927이 보이거나, 오래된 날짜가 하루 어긋날 수 있어요. 도구는 날짜를 읽을 수 있는 텍스트로 바꿔 줘요. 직접 내보내는 경우에는 날짜 열을 모든 프로그램이 같은 방식으로 읽는 ISO 형식 yyyy-mm-dd의 텍스트로 서식을 지정하세요.
앞의 0이 사라져요
02134 같은 우편번호도 텍스트지만, 엑셀은 직접 입력한 숫자를 숫자로 취급해서 2134로 보여 줘요. 시트에서 0이 사라지면, 그 시트에서 만든 CSV에도 0이 없어요. 0으로 시작하는 전화번호나 긴 ID 번호도 같은 문제를 겪어요. 아주 긴 숫자는 엑셀이 약 15자리 유효 숫자까지만 유지하기 때문에 자릿수가 사라지기도 해요.
해결책은 데이터를 입력하거나 가져오기 전에 해당 열을 텍스트로 저장하는 거예요. 이미 0이 들어 있는 CSV를 열 때는 파일을 더블클릭하지 말고, 데이터 > 텍스트/CSV에서 열을 텍스트로 지정하세요.
따옴표 규칙
RFC 4180은 일반적인 CSV 형식을 정의해요. 주요 따옴표 규칙은 다음과 같아요.
- 쉼표, 큰따옴표, 줄바꿈이 들어간 필드는 큰따옴표로 감싸야 해요.
- 따옴표로 감싼 필드 안의 큰따옴표는 큰따옴표 두 개로 적어요.
- 명세에서 줄은 CRLF로 끝나지만, 대부분의 도구는 LF도 받아들여요.
예를 들어 "Müller, Anna","She said ""ok""" 행에는 필드가 두 개 있어요. Müller, Anna와 She said "ok"예요. IANA에 등록된 CSV의 MIME 타입은 text/csv예요.
RFC 4180은 감싸지 않은 필드 안의 큰따옴표를 허용하지 않아요. 많은 파서는 이런 행을 거부하거나 잘못 나눠요. 필드를 올바르게 감싸거나, 불필요한 문자를 지우세요.
내보내기 전 체크리스트
- 엑셀로 열 파일이라면 BOM을 붙여서 CSV UTF-8로 내보내세요.
- 받는 프로그램이 기대하는 구분자를 고르세요.
- 우편번호나 전화번호처럼 ID 형태의 열은 텍스트로 서식을 지정하세요.
- 날짜는 yyyy-mm-dd로 적으세요.
- 파일을 일반 텍스트 편집기로 열어서 첫 줄과 악센트가 있는 이름 몇 개를 확인하세요.
줄바꿈 없는 공백 같은 숨은 문자도 가져오기 오류를 일으킬 수 있어요. 숨은 문자 제거 도구가 이를 찾아 지워 주고, 텍스트 속 숨은 문자에서는 이런 문자가 어디서 생기는지 설명해요. 파일을 정리했다면 CSV를 JSON으로 도구로 개발자용 형식으로 바꿀 수 있어요. 자세한 내용은 CSV를 JSON으로, 다시 CSV로에 있어요.
내보내기 전에 셀 자체도 살펴볼 만해요. 엑셀 수식 검사기는 오류를 표시하거나 다른 파일을 가리키는 수식을 찾아 주는데, 이런 셀이 CSV에서 비어서 나오는 바로 그 셀이에요. 내보낸 뒤에는 스프레드시트 비교로 버전 사이에 무엇이 바뀌었는지 확인하세요.
빠른 답변
같은 파일이 한 프로그램에서는 맞게 보이고 엑셀에서는 깨지는 이유는 뭔가요? BOM 없는 UTF-8 파일을 윈도우의 엑셀이 자기 로컬 인코딩으로 읽을 수 있어요. BOM을 추가하거나 UTF-8을 선택해서 가져오면 해결돼요.
Mac용 엑셀도 BOM이 필요한가요? 필요하다고 말하는 자료도 있어요. 그러니 보내기 전에 악센트가 있는 이름이 든 파일로 직접 테스트해 보세요.
내보낸 뒤에 날짜를 고칠 수 있나요? 일련번호 상태라면 고칠 수 있어요. 하지만 처음부터 yyyy-mm-dd로 내보내는 편이 더 좋아요.
변환할 때 내 스프레드시트가 업로드되나요? 도구는 브라우저에서 실행되므로 파일은 내 기기에서 처리돼요. 업로드 여부 확인 가이드로 직접 확인할 수 있어요.
AI 도움을 받아 영어 원문에서 번역했어요.
댓글
아직 댓글이 없어요. 첫 댓글을 남겨 보세요.


