작업해 보면 CSV 자체보다 Excel 쪽이 문제인 경우가 많다
처음에는 보통 CSV 파일이 잘못 만들어졌다고 생각한다.
하지만 몇 번 겪어 보면, 실제로는 원본 CSV보다 Excel이 여는 순간 내리는 판단 때문에 문제가 생기는 경우가 더 많다.
엑셀은 CSV를 열 때 아래 두 가지를 알아서 정한다.
- 이 파일을 어떤 문자셋으로 읽을지
- 각 값을 숫자, 날짜, 일반 텍스트 중 무엇으로 볼지
문제는 이 판단이 기대와 다를 때 발생한다.
그래서 CSV가 깨져 보이거나 값이 바뀌어 보일 때도, 파일 자체가 망가졌다기보다 Excel이 먼저 다르게 읽고 있다고 보는 쪽이 더 맞는 경우가 많다.
한글이 깨질 때는 파일보다 열기 방식부터 의심하게 된다
처음 보면 파일이 깨진 것처럼 보인다
UTF-8로 저장한 CSV를 열었는데 한글이 깨져 보일 때가 있다.
처음에는 당연히 내보내기가 잘못됐다고 생각하게 된다. 하지만 다시 열어 보면 의외로 파일 자체는 멀쩡한 경우가 많다.
같은 파일인데도 다르게 보일 수 있다
바로 더블클릭해서 열었을 때는 한글이 깨지는데, 텍스트/CSV 가져오기로 다시 열면 멀쩡하게 보이는 경우가 있다.
어떤 경우에는 인코딩을 다시 확인해 봐도 UTF-8이 맞는데, Excel이 BOM 없는 UTF-8을 제대로 잡지 못해서 첫 화면만 이상하게 보이기도 한다.
이런 일을 몇 번 겪고 나면, 한글이 깨졌다고 해서 곧바로 원본 CSV를 의심하지 않게 된다.
보통은 이런 경우가 많다
- UTF-8인데 Excel이 다른 문자셋처럼 읽은 경우
- CP949 계열 파일인데 UTF-8처럼 읽은 경우
- 파일 문제보다 열기 방식 차이로 결과가 달라진 경우
더 골치 아픈 쪽은 값이 조용히 바뀌는 경우다
겉으로는 멀쩡해 보여서 늦게 알아차린다
한글이 깨지면 바로 눈에 띈다.
반대로 값이 바뀌는 문제는 처음에는 잘 안 보인다. 정산하거나 대조하거나 lookup을 돌리는 단계에서 뒤늦게 발견되는 경우가 많다.
제일 흔한 것은 선행 0이 사라지는 경우다
리포트 CSV를 열었더니 00123이 123으로 바뀌는 경우가 있다.
숫자처럼 보이기는 하지만, 실제로는 계산용 숫자가 아니라 코드인 값들이 있다. 이때 Excel이 멋대로 숫자로 바꾸면 원래 의미가 바로 틀어진다.
특히 아래 같은 값은 숫자가 아니라 문자열로 보존돼야 한다.
- 고객 코드
- 주문 번호
- 계좌 관련 식별자
- 외부 시스템과 맞춰야 하는 참조 ID
날짜나 지수 표기로 바뀌는 것도 같은 문제다
선행 0만 문제가 되는 것은 아니다.
03-04 같은 값은 날짜처럼 보일 수 있고, 긴 숫자는 지수 표기처럼 보일 수 있다.
이런 변화는 화면상으로는 사소해 보여도, 실제 업무에서는 lookup이나 정산 대조를 쉽게 망가뜨린다.
결국 문제는 여기로 모인다
CSV에는 "이 열은 텍스트다"라는 정보가 강하게 들어 있지 않다.
그래서 Excel이 보기 좋은 쪽으로 바꾸는 순간, 사용자는 원본 그대로 보고 있다고 생각하지만 실제 값은 이미 달라져 있을 수 있다.
그래서 먼저 어느 쪽 문제인지부터 나눠서 본다
한글이 깨졌다면
이쪽은 거의 문자셋 문제다.
- UTF-8
- UTF-8 with BOM
- CP949
이 중 무엇으로 읽어야 자연스러운지 먼저 확인하는 편이 빠르다.
값이 달라졌다면
이쪽은 자동 타입 변환 문제일 가능성이 크다.
- 코드 열이 숫자로 바뀌었는지
- 선행 0이 사라졌는지
- 날짜처럼 보이는 값이 변환됐는지
- 긴 숫자가 지수 표기로 바뀌었는지
이 경우에는 import 단계에서 해당 열을 텍스트로 가져오거나, 처음부터 .xlsx로 바꿔서 여는 쪽이 훨씬 안전하다.
결국 더블클릭 전에 한 번 보는 습관이 제일 덜 피곤하다
CSV를 곧바로 더블클릭해서 열기보다, 한 번 확인한 뒤 Excel로 넘기는 흐름이 훨씬 안정적이다.
보통은 이렇게 본다
- CSV를 먼저 열어서 한글이 정상인지 확인한다
- 문자셋을 바꿔 보며 가장 자연스럽게 읽히는 상태를 찾는다
- 코드 열에 선행 0, 날짜처럼 보이는 값, 긴 숫자가 있는지 확인한다
- 필요하면
.xlsx로 변환한 다음 Excel에서 연다
이 정도만 해도 "파일이 깨진 줄 알았는데 사실은 Excel의 첫 해석이 문제였던 경우"를 꽤 많이 줄일 수 있다.
관련 글
같은 맥락에서 이어서 읽기 좋은 글들입니다.