¿Cuál es la diferencia entre CSV (MS-Dos), CSV (Macintosh), CSV (delimitado por comas)?

¿Cuál es la diferencia entre CSV (MS-Dos), CSV (Macintosh), CSV (delimitado por comas)?

¿Cuál es la diferencia entre los tipos de archivos CSV (MS-Dos), CSV (Macintosh), CSV (delimitado por comas) en Excel 2010? Todos aparecen como un tipo de archivo guardado, pero en última instancia son archivos de valores separados por comas.

Respuesta1

La diferencia entre [ellos] es si tienes ciertos caracteres especiales en los campos de texto; por ejemplo, un carácter acentuado (idioma extranjero). Si exporta como CSV de Windows, esos campos se codifican utilizando la página de códigos Windows-1252. La codificación de DOS generalmente utiliza la página de códigos 437, que asigna caracteres utilizados en PC antiguas anteriores a Windows. Si exporta como uno y luego importa con una herramienta que espera el otro, la mayoría de las cosas se verán bien, pero obtendrá resultados inesperados si, por ejemplo, conoce a alguien con una diéresis (u otro carácter extranjero) en su nombre.

fuente

Respuesta2

¿Cuál es la diferencia entre los tipos de archivos CSV (MS-Dos), CSV (Macintosh), CSV (delimitado por comas) en Excel?

Usando Excel 16.8 2023 MS365:

Con file(archivo 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: fileproporciona una suposición y puede dar respuestas variables dependiendo de la longitud del formato csv.

La presencia de bytes de retorno de carro (CR) y avance de línea (LR) son la gran diferencia de formato y son mucho más clarificadores cuando se analizan introspectivamente.

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 es el separador en los CSV anteriores. Es importante observar que la última fila NO recibe un terminal 0x0D 0x0A (CSV), 0x0d (MAC) o 0x0D 0x0A (MSDOS). Esto puede convertirse en una sorpresa, ya que he sido testigo de cómo Excel agregó un 0x0D 0x0A adicional que podría romper la lógica de procesamiento si CR y/o LF indican que el código lo utiliza para continuar con el análisis.

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

Nota: '--' son redacciones, ya que provienen de un archivo Excel real.

Sospecho que dicho resultado proviene de la generación programada de archivos CSV dentro de herramientas de productividad de MS como VB.

Cuando está vacío, todos están vacíos.

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

(Estadísticas de macOS 12.6 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                                .,,,

Las diferencias en la codificación de caracteres se responden en otra parte de esta pregunta de Stack Exchange.

Pero Excel proporciona un cuarto método para guardar un 'CSV' que nos lleva a "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

Aquí, filees mucho más detallado y específico. Los bytes del archivo aparecen 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

Entonces podemos ver que los primeros tres bytes (marcador de orden de bytes) están bien. Y podemos ver que los archivos CSV codificados en UTF-8 utilizan la terminación CR LF que tampoco se aplica al último registro.

Finalmente, hay más lugares a donde acudir con respecto a las diferencias. Como se señaló, me vienen a la mente la codificación de caracteres, los separadores reales y cómo se ven afectados por la localización y la cita de valores que coinciden con el separador.

Sentí que era útil once años después proporcionar esta advertencia para aquellos que esperan usar 'CSV' para la ingesta programática de archivos CSV de origen humano para el intercambio de datos. Noté que esta pregunta de Stack Exchange carecía de una respuesta precisa sobre el formato de archivo para tal ambición.

información relacionada