Excel CSV와 표준 CSV의 진정한 차이점은 무엇입니까?
예를 들어, 한 셀 내에서 줄 바꿈이있는 열을 처리 할 때 어떻게 다르게 인코딩합니까?
Excel CSV와 표준 CSV의 진정한 차이점은 무엇입니까?
예를 들어, 한 셀 내에서 줄 바꿈이있는 열을 처리 할 때 어떻게 다르게 인코딩합니까?
답변:
"표준"CSV로 정의한 내용에 따라 달라집니다. 내가 아는 한 Excel은 RFC 4180에 설명 된 규칙 , "CSV 파일의 공통 형식 및 MIME 형식"을 따릅니다 .
첫 번째 행의 첫 번째 셀에 두 개의 줄 바꿈이있는 테이블을 고려하십시오. Excel에서는 다음과 같습니다.
+---+---------------+------------+------------+
| | A | B | C |
+---+---------------+------------+------------+
| 1 | col1, line1a | | |
| | col1, line1b | | |
| | col1, line1c | col2, row1 | col3, row1 |
| 2 | col1, row2 | col2, row2 | col3, row2 |
+---+---------------+------------+------------+
이제 Excel에서 어떻게 이것을 내 보냅니 까? 보자 – 텍스트 편집기는 이것을 표시 할 것이다 :
"col1, line1a
col1, line1b
col1, line1c","col2, row1","col3, row1"
"col1, row2","col2, row2","col3, row2"
매우 정교하지 않습니다. 0D
셀에서 줄 바꿈이 발생한 곳에 캐리지 리턴 (hex )을 삽입합니다 . 모든 셀은 큰 따옴표로 묶습니다. 또한 실제 행은 캐리지 리턴으로 구분됩니다.
이를 올바르게 구문 분석하려면 CSV 파서가
그렇게하지 않으면 다음과 같은 문제가 생길 수 있습니다 . 줄 바꿈을 무시하지 못했기 때문에 이제 두 줄 대신 네 줄이 있습니다.
+---+---------------+------------+------------+
| | A | B | C |
+---+---------------+------------+------------+
| 1 | "col1, line1a | | |
| 2 | col1, line1b | | |
| 3 | col1, line1c" | col2, row1 | col3, row1 |
| 4 | col1, row2 | col2, row2 | col3, row2 |
+---+---------------+------------+------------+
그러나 RFC가 말한 것을 보자, 아마도 Excel이 올바르게 했습니까?
줄 바꿈 (CRLF), 큰 따옴표 및 쉼표가 포함 된 필드는 큰 따옴표로 묶어야합니다.
깔끔합니다. 바로 Excel이하는 일입니다. 요약하자면 Excel은 "표준"CSV 파일의 권장 사항을 따르는 것 같습니다. 적절한 CSV 파서가 제공되면 Excel CSV 파일도 읽을 수 있어야합니다.
원래 CSV 구현에서 나는 모든 텍스트 필드가 따옴표로 묶여 있고 숫자가 필요하지 않다는 것을 이해했습니다. Excel에서는이 작업을 수행하지 않으며 Microsoft에서 생성하지 않은 플랫폼에서 Excel로 생성 된 CSV 파일을 업로드하려고하면 실패합니다. 이는 표준 Microsoft 접근 방식이며 상호 운용성을 무시하고 맹목적으로 규칙을 따르는 데 중점을 둡니다. IE에서도 비슷한 일이 발생했으며 패딩 및 여백 속성에 대해 html / css 규칙을 올바르게 따르고 기존의 모든 웹 페이지와 웹 브라우저가 다르게 처리한다는 사실을 무시했습니다. 결과적으로 거의 모든 웹 페이지에는 이제 IE에 대한 특별한 규칙이 있습니다. Excel에서 쓸모없는 csv 파일을 찾은 다음 "연결"기능 열을 사용하여 수동으로 직접 만듭니다.