CSV 란?
CSV 는 표 형태의 데이터를 평문으로 담는다. 한 줄에 한 레코드, 필드는 구분자로 나뉜다. 공식적인 타입 체계도, 하나로 합의된 명세도 없다. 같은 확장자 아래 쉼표·세미콜론·탭·파이프로 나뉜 파일이 뒤섞여 있고, 도구마다 같은 파일을 다르게 읽는 이유가 그것이다.
이 뷰어는 파일을 읽어, 따옴표 밖에서 각 후보가 줄마다 얼마나 일정하게 나타나는지를 보고 구분자를 추측한 뒤, 스크롤되는 표나 JSON 으로 보여준다. 모든 파싱이 브라우저에서 일어나므로 고객 데이터나 내부 리포트를 어디에도 올리지 않고 열어볼 수 있다.
Within the header and each record, there may be one or more fields, separated by commas. Each line should contain the same number of fields throughout the file.
기능
- 구분자를 추측하고, 무엇으로 골랐는지 말한다
- 쉼표·세미콜론·탭·파이프를 모두 시험해 줄마다 얼마나 고르게 나타나는지로 고른다. 따옴표 안은 세지 않는다. 한국어·유럽 로캘의 엑셀은 세미콜론으로 내보내는데, 쉼표라고 가정하는 도구는 한 열짜리 뭉텅이를 보여준다.
- 따옴표를 제대로
- 구분자가 든 따옴표 필드, 필드 안의 줄바꿈, 두 번 쓴 따옴표("")를 RFC 4180 대로 다룬다. "성, 이름" 은 한 필드로 남는다.
- 칸 수가 안 맞는 줄을 알린다
- 헤더보다 칸이 많거나 적은 줄을 조용히 자르지 않고 알려 준다. 대개 따옴표가 빠진 자리이고, 그걸 운영에서 발견하면 훨씬 비싸다.
- 말이 되는 타입으로 JSON 변환
- 숫자와 불리언은 진짜 JSON 타입이 되지만 앞자리가 0 인 값은 문자열로 남는다. 우편번호와 전화번호가 첫 자리를 잃지 않는다.
- 큰 파일에서도 멈추지 않는다
- 표는 앞 200행만 그리고 전체 개수를 함께 알린다. 큰 내보내기 파일을 열어도 화면이 굳지 않는다.
사용법
- 1
데이터를 붙여넣는다
CSV·TSV 등 구분자로 나뉜 텍스트를 왼쪽에 붙여넣는다.
- 2
구분자를 확인한다
자동이 추측하고 무엇을 골랐는지 보여준다. 틀렸으면 직접 고른다.
- 3
첫 줄이 헤더인지 정한다
헤더가 있으면 첫 줄에서 열 이름을 가져오고, 없으면 열에 번호를 매긴다.
- 4
표나 JSON 으로 읽는다
보기를 바꿔 가며 읽고, 요청 본문이나 픽스처에 넣을 JSON 을 복사한다.
UTF-8 CSV 인데 엑셀에서 한글이 깨지는 이유
엑셀은 .csv 파일에서 UTF-8 을 알아서 감지하지 않는다. 바이트 순서 표시(BOM)가 없으면 시스템의 옛 코드 페이지로 — 한국어 윈도우라면 CP949 로 — 디코딩하고, 여러 바이트로 된 글자는 모조리 깨진 문자열이 된다. 파일이 망가진 것이 아니라 틀린 전제로 읽히고 있는 것이다.
해결은 UTF-8 BOM 이다. 파일 맨 앞의 세 바이트 EF BB BF 를 엑셀이 "UTF-8 로 읽으라"는 신호로 받아들인다. 대가도 알아 두어야 한다 — 그 바이트는 데이터가 아니어서, 같은 파일을 엄격한 파서로 읽으면 첫 열 이름이 id 가 아니라 U+FEFF 가 앞에 붙은 id 로 잡힌다. 이 뷰어가 읽을 때 앞의 BOM 을 떼어내는 이유이고, 엑셀에 줄 파일에는 반대로 붙여야 하는 이유다.
자주 묻는 질문
CSV 가 한 열로만 열린다
구분자가 맞지 않는 것이다. 쉼표를 소수점으로 쓰는 로캘 — 한국어·독일어·프랑스어 등 — 에서 엑셀은 세미콜론으로 내보낸다. 쉼표라고 가정하는 뷰어는 한 줄을 한 필드로 본다. 구분자를 세미콜론으로 바꾸거나, 자동으로 두면 후보마다 줄 간 일관성을 따져 고른다.
CSV 를 JSON 으로 어떻게 바꾸나?
CSV 를 붙여넣고 "첫 줄이 헤더" 를 켠 채로 — 그래야 헤더 이름이 키가 된다 — 출력을 JSON 으로 바꾼다. 각 행이 배열 안의 객체 하나가 된다.
필드 안의 쉼표도 되나?
따옴표로 감싸면 된다. "성, 이름" 은 한 필드다. 따옴표 안의 줄바꿈, 이스케이프를 위해 두 번 쓴 따옴표도 RFC 4180 대로 처리한다.
우편번호의 앞자리 0 이 사라진다
이 도구에서는 사라지지 않는다. 타입을 추론할 때 앞자리가 0 인 값은 문자열로 남긴다. 원인은 대개 스프레드시트다 — 불러올 때 03187 을 숫자 3187 로 바꿔 버리고, 변환기에 오기도 전에 0 이 없어진다.
CSV 가 업로드되나?
아니다. 파싱은 브라우저에서 일어나고 페이지에 백엔드가 없다. 고객 목록이나 내부 내보내기 파일이 기기 밖으로 나가지 않는다.
CSV 와 TSV 는 뭐가 다른가?
구분자만 다르다. TSV 는 탭으로 나눈다. 탭은 데이터 안에 잘 나타나지 않아 따옴표를 훨씬 덜 써도 되고, 그래서 데이터 파이프라인이 선호한다. 이 뷰어는 둘 다 읽는다.
이 도구가 따르는 규격
- RFC 4180 — CSV 파일의 공통 형식과 MIME 타입 — 이 파서가 따르는 따옴표 규칙. 두 번 쓴 따옴표와 필드 안의 줄바꿈이 여기 있다.
- W3C — 웹의 표 데이터와 메타데이터 모델 — CSV 에 타입 체계가 없는 이유와, 읽는 쪽이 무엇을 추론해야 하는지.