Qual é a diferença entre - CSV (MS-Dos), CSV (Macintosh), CSV (delimitado por vírgula)

Qual é a diferença entre - CSV (MS-Dos), CSV (Macintosh), CSV (delimitado por vírgula)

Qual é a diferença entre os tipos de arquivo - CSV (MS-Dos), CSV (Macintosh), CSV (delimitado por vírgula) no Excel 2010? Eles estão todos listados como um tipo de arquivo salvo, mas, em última análise, são arquivos com valores separados por vírgula.

Responder1

A diferença entre [eles] é se você possui certos caracteres especiais nos campos de texto; por exemplo, um caractere acentuado (língua estrangeira). Se você exportar como Windows CSV, esses campos serão codificados usando a página de código Windows-1252. A codificação DOS geralmente usa a página de código 437, que mapeia caracteres usados ​​em PCs anteriores ao Windows. Se você exportar como um e depois importar com uma ferramenta que espera o outro, a maioria das coisas parecerá bem, mas você obterá resultados inesperados se, por exemplo, conhecer alguém com trema (ou outro caractere estrangeiro) no nome.

fonte

Responder2

Qual é a diferença entre os tipos de arquivo - CSV (MS-Dos), CSV (Macintosh), CSV (delimitado por vírgula) no Excel

Usando Excel 16.8 2023 MS365:

Com file(arquivo macOS 12.6 5.41 Darwin, et al.)

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

Nota: filefornece uma estimativa e é capaz de dar respostas variáveis ​​dependendo do comprimento do formato csv.

A presença de bytes de retorno de carro (CR) e alimentação de linha (LR) é a grande diferença de formato e muito mais esclarecedora quando introspectada.

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 é o separador nos CSVs acima. É importante observar que a linha final NÃO recebe terminal 0x0D 0x0A (CSV), 0x0d (MAC) ou 0x0D 0x0A (MSDOS). Isso pode se tornar uma surpresa, pois testemunhei o Excel adicionando um 0x0D 0x0A final adicional que poderia quebrar a lógica de processamento se CR e/ou LF indicar que é usado pelo código para continuar a análise.

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

Nota: '--' são redações, pois são de um arquivo Excel real.

Suspeito que essa saída venha da geração com script de arquivos CSV em ferramentas de produtividade da MS, como VB.

Quando vazio, todos estão vazios

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

(macOS 12.6 estatística Brown, et al.)

 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                                .,,,

Respondidas em outro lugar aqui nesta pergunta do Stack Exchange estão as diferenças de codificação de caracteres.

Mas o Excel fornece um quarto método para salvar um 'CSV' que nos leva ao "CSV UTF-8"

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

Aqui, fileé muito mais detalhado e específico. Os bytes do arquivo aparecem como:

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

Portanto, podemos ver que os três primeiros bytes (marcador de ordem de bytes) estão bons. E podemos ver que os arquivos CSV codificados em UTF-8 usam terminação CR LF que também não é aplicada ao último registro.

Finalmente, há mais lugares para ir em relação às diferenças. Conforme observado, vêm à mente a codificação de caracteres, os separadores reais e como a localização e a citação de valores que correspondem ao separador são afetadas.

Achei que seria útil, onze anos depois, fornecer esta história de advertência para aqueles que desejam usar 'CSV' para ingestão programática de arquivos CSV de origem humana para intercâmbio de dados. Percebi que esta pergunta do Stack Exchange não tinha uma resposta precisa em formato de arquivo para tal ambição.

informação relacionada