CSV(MS-Dos), CSV(Macintosh), CSV(쉼표로 구분)의 차이점은 무엇인가요?

CSV(MS-Dos), CSV(Macintosh), CSV(쉼표로 구분)의 차이점은 무엇인가요?

Excel 2010의 CSV(MS-Dos), CSV(Macintosh), CSV(쉼표로 구분) 파일 형식의 차이점은 무엇입니까? 모두 저장 파일 형식으로 나열되어 있지만 궁극적으로 쉼표로 구분된 값 파일입니다.

답변1

[그들]의 차이점은 텍스트 필드에 특정 특수 문자가 있는지 여부입니다. 예를 들어 악센트가 있는(외국어) 문자입니다. Windows CSV로 내보내는 경우 해당 필드는 Windows-1252 코드 페이지를 사용하여 인코딩됩니다. DOS 인코딩은 일반적으로 Windows 이전 PC에서 사용되는 문자를 매핑하는 코드 페이지 437을 사용합니다. 하나로 내보낸 다음 다른 것을 예상하는 도구를 사용하여 가져오는 경우 대부분은 괜찮아 보이지만 예를 들어 이름에 움라우트(또는 기타 외국 문자)가 있는 사람을 알고 있는 경우 예상치 못한 결과가 발생합니다.

원천

답변2

Excel의 CSV(MS-Dos), CSV(Macintosh), CSV(쉼표로 구분) 파일 형식의 차이점은 무엇입니까?

Excel 16.8 2023 MS365 사용:

(macOS 12.6 파일 5.41 Darwin 외 file)

file *.csv
MSDOS.csv: CSV text
MAC.csv: ASCII text, with CR line terminators
CSV.csv: CSV text

참고: file추측을 제공하며 csv 형식의 길이에 따라 다양한 답변을 제공할 수 있습니다.

캐리지 리턴(CR) 및 줄 바꿈(LR) 바이트의 존재는 큰 형식 차이이며 자세히 살펴보면 훨씬 더 명확해집니다.

0x0d CR 0x0a LF

 for file in *.csv; do echo -n $file" "; xxd $file | tail -2; done
CSV.csv 000012b0: 0d0a 2c2c 2c0d 0a2c 2c2c 0d0a 2c2c 2c0d  ..,,,..,,,..,,,.
000012c0: 0a2c 2c2c                                .,,,
MAC.csv 00001260: 0d2c 2c2c 0d2c 2c2c 0d2c 2c2c 0d2c 2c2c  .,,,.,,,.,,,.,,,
00001270: 0d2c 2c2c                                .,,,
MSDOS.csv 000012b0: 0d0a 2c2c 2c0d 0a2c 2c2c 0d0a 2c2c 2c0d  ..,,,..,,,..,,,.
000012c0: 0a2c 2c2c                                .,,,

0x2c는 위 CSV의 구분 기호입니다. 마지막 행은 터미널 0x0D 0x0A(CSV), 0x0d(MAC) 또는 0x0D 0x0A(MSDOS)를 수신하지 않는다는 점을 관찰하는 것이 중요합니다. 구문 분석을 계속하기 위해 코드에서 CR 및/또는 LF가 사용됨을 나타내는 경우 처리 논리를 중단시킬 수 있는 추가 후행 0x0D 0x0A에 Excel이 추가하는 것을 목격했기 때문에 이는 놀라운 일이 될 수 있습니다.

00000530: 2c-- --34 3045 4330 30-- ---- --2c 3138  ,--40EC00----,18
00000540: 390d 0a                                  9..

참고: '--'는 실제 Excel 파일에서 가져온 것이므로 수정된 것입니다.

나는 그러한 출력이 VB와 같은 MS 생산성 도구 내에서 스크립트로 작성된 CSV 파일 생성에서 나온 것이라고 생각합니다.

비어 있으면 모두 비어 있다

stat -f "%z %N" *EMPTY.csv   
0 CSV_EMPTY.csv
0 MAC_EMPTY.csv
0 MSDOS_EMPTY.csv

(macOS 12.6 통계 Brown 외)

 for file in *.csv; do echo $file" "; xxd $file | tail -2; done
CSV.csv 
000012b0: 0d0a 2c2c 2c0d 0a2c 2c2c 0d0a 2c2c 2c0d  ..,,,..,,,..,,,.
000012c0: 0a2c 2c2c                                .,,,
MAC.csv
00001260: 0d2c 2c2c 0d2c 2c2c 0d2c 2c2c 0d2c 2c2c  .,,,.,,,.,,,.,,,
00001270: 0d2c 2c2c                                .,,,
MSDOS.csv
000012b0: 0d0a 2c2c 2c0d 0a2c 2c2c 0d0a 2c2c 2c0d  ..,,,..,,,..,,,.
000012c0: 0a2c 2c2c                                .,,,

이 Stack Exchange 질문의 다른 곳에서는 문자 인코딩 차이점에 대한 답변을 얻을 수 있습니다.

그러나 Excel에서는 "CSV UTF-8"로 연결되는 'CSV'를 저장하는 네 번째 방법을 제공합니다.

file UTF8_EMPTY.csv 
UTF8_EMPTY.csv: Unicode text, UTF-8 text, with no line terminators
file UTF8.csv      
UTF8.csv: Unicode text, UTF-8 (with BOM) text, with CRLF line terminators

여기서는 file훨씬 더 장황하고 구체적입니다. 파일 바이트는 다음과 같이 나타납니다.

xxd UTF8_EMPTY.csv 
00000000: efbb bf                                  ...
xxd UTF8.csv      
00000000: efbb bf31 2c32 2c33 0d0a 342c 352c 36    ...1,2,3..4,5,6

따라서 처음 3바이트(바이트 순서 표시자)가 양호하다는 것을 알 수 있습니다. 그리고 UTF-8로 인코딩된 CSV 파일은 마지막 레코드에도 적용되지 않는 CR LF 종료를 사용하는 것을 볼 수 있습니다.

마지막으로 차이점과 관련하여 더 많은 곳을 방문해야 합니다. 언급한 대로 문자 인코딩, 실제 구분 기호, 현지화의 영향을 받는 방식 및 구분 기호와 일치하는 값의 인용이 떠오릅니다.

나는 11년 후 데이터 교환을 위해 인간이 만든 CSV 파일을 프로그래밍 방식으로 수집하기 위해 'CSV'를 사용하려는 사람들에게 이 경고 이야기를 제공하는 것이 유용하다고 느꼈습니다. 나는 이 Stack Exchange 질문에 그러한 야망에 대한 정확한 파일 형식 답변이 부족하다는 것을 알았습니다.

관련 정보