데이터 형식·구조화 데이터
CSV 열이 어긋날 때 따옴표와 줄바꿈 확인하기
사용할 도구
두 열로 내보낸 자료가 세 열이 되거나 한 레코드가 다음 줄로 넘어가 보일 수 있습니다. 쉼표와 줄바꿈은 주소나 메모의 일부일 수 있으니 바로 지우지 마세요. 따옴표가 쉼표의 역할을 결정합니다.
CSV 편집기의 표와 JSON/CSV 변환으로 각 값이 어느 셀에 들어가는지 확인합니다. 예제는 작은 가상 UTF-8 데이터입니다. 글자가 깨졌다면 인코딩을 따로 확인하세요. 값을 고쳐 원문을 꾸미는 것이 아니라 경계를 올바르게 읽는 것이 목적입니다.
주소의 쉼표를 한 셀에 담기
id,address
001,North, Building A헤더는 두 필드인데 데이터에는 쉼표가 두 개라 열 수가 맞지 않습니다. Building A가 별도 필드라는 뜻은 아닙니다. 전체 주소가 한 값이라면 전체를 큰따옴표로 감싸야 하며 남는 열을 조용히 버려서는 안 됩니다.
id,address
001,"North, Building A"표에는 001과 North, Building A가 두 값으로 나타나고 경계용 따옴표는 주소에 포함되지 않아야 합니다. JSON으로 바꾸면 001이 문자열로 남는지도 확인할 수 있습니다. 다른 스프레드시트는 숫자로 추정할 수 있으므로 다음 전달 단계에서도 형식을 확인하세요.
세 줄로 보여도 레코드는 하나일 수 있습니다
id,note
001,"first line
second line"헤더와 데이터 레코드 하나입니다. note의 따옴표가 실제 줄바꿈을 가로질러 두 줄이 한 셀에 들어갑니다. 표에서는 메모 하나, JSON에서는 문자열 안의 줄바꿈으로 보입니다. 원문 줄 수와 레코드 수는 다릅니다.
중복 줄이나 빈 줄 삭제가 따옴표 안 메모를 지울 수 있습니다. CSV는 레코드로 해석한 뒤 다루고 로그용 줄 처리 방식을 그대로 쓰지 마세요. 받는 시스템이 내부 줄바꿈을 금지하면 값이 바뀐다는 점을 알리고 대체 규칙을 정해야 합니다.
값에 포함된 따옴표는 두 개로 쓰기
id,name
001,"Notebook ""mini"""name은 Notebook "mini"로 보여야 합니다. 바깥 따옴표는 필드 경계이고 내부의 두 따옴표는 실제 따옴표 하나입니다. JSON의 백슬래시 표기를 CSV에 그대로 쓰지 말고 값과 형식별 표현을 구별하세요.
모든 필드를 따옴표로 감싸면 단순한 값도 소스 모양이 달라집니다. 다시 읽은 셀이 같으면 표기만 달라진 것입니다. 원문이 다르다고 데이터 손실은 아니지만 실제 따옴표가 사라지면 값이 바뀐 것입니다. 해석 후의 값을 비교하세요.
한 열에 몰리면 구분자 확인하기
id;amount
001;12.50쉼표로 읽으면 id;amount 전체가 헤더 하나가 될 수 있습니다. 세미콜론으로 바꿔 두 열이 되는지 보세요. 한 열로 읽혔다고 맞는 것은 아니므로 이름, 열 수, 첫 레코드와 마지막 레코드를 확인합니다. 잘못된 설정을 고치려고 값 안의 문장부호까지 일괄 치환하지 마세요.
편집기는 선택한 구분자로 입력을 읽으므로 입력·출력 구분자를 독립적으로 지정할 수 있다고 가정하지 마세요. 먼저 올바르게 읽고 필요하면 JSON으로 값을 확인합니다. 소수점 쉼표와 필드 구분자는 역할이 다릅니다.
빈 값, 0, 수식처럼 보이는 문자열 확인하기
빈 셀과 명시적인 0은 다르며 CSV는 빈 문자열과 JSON null의 차이를 보존하지 못할 수 있습니다. 빈 값을 모두 0으로 바꾸면 미응답이 숫자 0으로 변합니다. 자료형과 누락 의미는 생산자·수신자의 약속이며 따옴표 수정 중 임의로 정하지 않습니다.
스프레드시트로 넘기기 전에 = 등으로 시작하는 문자열도 확인하세요. 수식 중화는 접두사를 붙여 값을 변경합니다. 사람이 읽을 표와 프로그램이 원문을 받을 내보내기를 구분하고, CSV 따옴표만으로 모든 수식 실행을 막는다고 생각하지 마세요.
주소 쉼표, 여러 줄 메모, 따옴표 이름, 앞자리 0이 있는 ID의 작은 예제와 예상 레코드 수·셀 값을 남기세요. 가상 자료 두세 건으로 운영 파일의 문제를 재현하면 원인과 공유 범위를 함께 줄일 수 있습니다.