상세 컨텐츠

본문 제목

RFC 4180-CSV(Comma-Separated Values) 파일의 일반적인 포멧과 마임(MIME) 타입

Others

by thankee 2008. 10. 24. 13:08

본문

원문 : http://www.ietf.org/rfc/rfc4180.txt

1. Introduction

CSV 포멧은 완전히 다른 스프레드시트프로그램들 사이에서 데이터를 교환하거나 변환하기 위해 사용됩니다. 놀랍게도, 이 파일 포멧은 매우 일반적이기 때문에 이 포멧은 공식적으로 문서화 된 적이 없습니다. 덧붙여서, IANA MIME에는 "text/tab-separated-values"를 포함하고 있으면서도, CSV를 위한 MIME타입은 등록되어 있지 않았습니다. 또한, 다양한 프로그램과 운영체제는 CSV를 위해 다른 MIME타입을 사용하기 시작했습니다. 이 RFC문서는 CSV파일과 CSV파일을 위해 공식적으로 등록된 "text/csv" MIME 타입에 대해서 설명합니다.

2. CSV 포멧의 정의

CSV포멧에 대한 많은 명세와 구현이 있었음에도, 공식적인 명세는 존재하지 않았었습니다.

  1. 각 레코드는 CRLF로 구분된 라인에 구현됩니다.
    aaa,bbb,ccc CRLF
    zzz,yyy,xxx CRLF
  2. 파일의 마지막 레코드는 CRLF를 포함할 수도, 하지 않을 수 도 있습니다.
    aaa,bbb,ccc CRLF
    zzz,yyy,xxx
  3. 파일의 첫째라인에는 헤더라인이 위치할 수 도 있습니다. 헤더라인은 일반적인 다른 라인과 포멧이 일치해야합니다. 이 헤더라인은 각 필드에 부합하는 필드네임을 포함하며, 반드시 다른 레코드의 필드의 수와 일치해야합니다.(헤더라인이 존재하는지 그렇지 않은지는 반드시 MIME 타입의 "header" 매개변수(생략가능)에 의해 명시되어야합니다.)
    field_name,field_name,field_name CRLF
    aaa,bbb,ccc CRLF
    zzz,yyy,xxx CRLF
  4. 헤더를 포함한 모든 레코드는 콤마로 구분된 하나 이상의 필드가 존재해야합니다. 모든 레코드는 같은 수의 필드를 포함하고있어야 합니다. 공백은 해당 필드의 데이터로 간주되지 무시되지 않습니다. 레코드의 마지막 필드는 반드시 콤마를 포함하지 않습니다.
    aaa,bbb,ccc
  5. 각 필드는 쌍따옴표에 내부에 존재할수도 그렇지 않을 수 도 있습니다.(하지만 특정프로그램(Microsoft Excel)은 쌍따옴표를 전혀 사용하지 않습니다.) 만약 필드가 쌍따옴표에 의해 둘러싸여 있지 않다면, 필드 내부에는 쌍따옴표를 데이터로 사용할 수 없습니다.
    "aaa","bbb","ccc" CRLF
    zzz,yyy,xxx
  6. 필드가 쌍따옴표나 CRLF, 콤마 등의 데이터를 가지기 위해서는 반드시 쌍따옴표에 의해 해당 필드가 둘러쌓여있어야합니다.
    "aaa","b CRLF
    bb","ccc" CRLF
    zzz,yyy,xxx
  7. 쌍따옴표가 필드의 데이터로 사용된다면, 해당 쌍따옴표는 다른 쌍따옴표에 의해 탈출문자열로 표현되어야 합니다.(즉 일반적인 C나 Java에서는 탈출문자열로서 역슬러쉬('\')나 원화를 사용했지만 CSV에서는 쌍따옴표를 탈출문자열로 사용한다는 의미입니다.)
    "aaa","b""bb","ccc"

3. "text/csv" MIME 타입

여기에서는 media-type 등록 어플리케이션에 대해 설명합니다.(RFC2048)

   To: ietf-types@iana.org

   Subject: Registration of MIME media type text/csv

   MIME media type name: text

   MIME subtype name: csv

   Required parameters: none

   Optional parameters: charset, header

일반적으로 ASCII를 CSV에 사용하지만 "charset" 매개변수를 이용하여 다른 Encoding 방식도 사용할 수 있습니다.

"header"매개변수는 헤더라인이 존재하는지 그렇지 않은지에 대한 정보를 담고있습니다. 유효한 매개변수 값으로는 "present", "absent" 중 하나입니다. 이 매개변수를 사용하지 않을 사용자는 스스로 헤더라인을 사용할지 아닌지를 결정해야합니다.

엔코딩에 대해 고려할점 :
RFC 2046의 4.1.1절에는 CRLF를 라인 구분자로 사용하도록 합니다. 하지만, 사용자가 다른 값을 사용하기 위해서는 다른 값을 사용한다는 점을 알려야합니다. 

보안에 대한 고려점:
CSV파일은 아무 문제를 일으키지 않는 텍스트 데이터를 포함합니다. 그러나 CSV를 처리하는 프로그램 내에서 정책적으로 잠재적인 버퍼오버런을 일으키기 위해서 악의적인 이진데이터를 사용할 수 있습니다. 또한, Private 데이터도 이 포멧을 이용해서 공유되어 질 수 있습니다.

상호 운용성에 대해 고려할점:
단일 명세가 없었기 때문에, 현재 구현물들 사이에 상당한 차이점이 많이 있습니다. CSV파일 구현자는 자신이 하는 일에 대해서는 신중하게, 다른 것으로부터 취할때는 대범해야합니다.(RFC 783 [8]).

 

원저작자:

Author's Address

   Yakov Shafranovich

   SolidMatrix Technologies, Inc.

   EMail: ietf@shaftek.org

   URI:   http://www.shaftek.org

 

아직 지식이 부족해서, 정확한 해석을 할 수 없는 몇 부분과 참조 감사의 말 등의 부분은 해석하지 않았습니다. 좀 더 자세한 정보를 원하시는 분은 원문 http://www.ietf.org/rfc/rfc4180.txt 을 참조하시길 바랍니다.

감사합니다.

관련글 더보기