¿Cuál es la verdadera diferencia entre un CSV de Excel y un CSV estándar?
Por ejemplo, al manejar columnas con saltos de línea dentro de una celda, ¿cómo la codifican de manera diferente?
¿Cuál es la verdadera diferencia entre un CSV de Excel y un CSV estándar?
Por ejemplo, al manejar columnas con saltos de línea dentro de una celda, ¿cómo la codifican de manera diferente?
Respuestas:
Depende absolutamente de lo que defina como CSV "estándar". En lo que a mí respecta, Excel sigue las reglas descritas en RFC 4180 , el "Formato común y tipo MIME para archivos CSV".
Considere una tabla donde la primera celda en la primera fila tiene dos saltos de línea. En Excel, se vería así:
+---+---------------+------------+------------+
| | A | B | C |
+---+---------------+------------+------------+
| 1 | col1, line1a | | |
| | col1, line1b | | |
| | col1, line1c | col2, row1 | col3, row1 |
| 2 | col1, row2 | col2, row2 | col3, row2 |
+---+---------------+------------+------------+
Ahora, ¿cómo exportaría Excel esto? Veamos, un editor de texto mostrará esto:
"col1, line1a
col1, line1b
col1, line1c","col2, row1","col3, row1"
"col1, row2","col2, row2","col3, row2"
No muy sofisticado. Inserta un retorno de carro (hex 0D
) donde estaba el salto de línea en nuestra celda. Cada celda está rodeada de comillas dobles. Además, las filas reales se separan con un retorno de carro.
Para analizar esto correctamente, un analizador CSV necesitaría
Si no lo hiciera, terminaría con algo confuso como este: tenga en cuenta que ahora hay cuatro líneas en lugar de dos, porque no pudo ignorar los saltos de línea.
+---+---------------+------------+------------+
| | A | B | C |
+---+---------------+------------+------------+
| 1 | "col1, line1a | | |
| 2 | col1, line1b | | |
| 3 | col1, line1c" | col2, row1 | col3, row1 |
| 4 | col1, row2 | col2, row2 | col3, row2 |
+---+---------------+------------+------------+
Pero, veamos lo que dice el RFC, ¿tal vez Excel lo hizo bien?
Los campos que contienen saltos de línea (CRLF), comillas dobles y comas deben ir entre comillas dobles.
Genial, eso es exactamente lo que hizo Excel. Resumiendo, Excel parece seguir las recomendaciones de un archivo CSV "estándar". Dado un analizador CSV adecuado, también debería poder leer archivos CSV de Excel.
Mi comprensión de la implementación original de csv fue que todos los campos de texto estaban encerrados entre comillas y los números no necesitaban estar. Excel no hace esto y si intenta cargar sus archivos csv generados por Excel en plataformas que no sean de Microsoft, fallarán. Este es un enfoque estándar de Microsoft, ignora la interoperabilidad y enfócate en seguir ciegamente las reglas. Algo similar sucedió con IE, siguieron las reglas html / css correctamente para los atributos de margen y margen e ignoraron el hecho de que cada página web y navegador web existente los trataba de manera diferente. El resultado, casi todas las páginas web ahora tienen reglas especiales para IE. Encuentro que los archivos CSV producidos por Excel son inútiles y utilizo una columna de funciones "concatenar" para crearlos manualmente.