Las especificaciones CSV es uno que encuentro implementado de muchas maneras diferentes... básicamente parece que solo tiene especificaciones a la mitad, lo que es frustrante dada su popularidad.
Para incluir una nueva línea dentro de una celda en un CSV, es posible que se deba ajustar la celda o que se deba escapar la nueva línea. Notarás en el documento vinculado que hay tres formas de hacer esto, y diferentes programas lo tratan de manera diferente:
- Excel envuelve toda la celda entre comillas dobles:una celda puede tener caracteres de nueva línea (sin escape) dentro de ella y se considera una sola celda, siempre que esté entre comillas dobles (tenga en cuenta que también deberá usar el estilo de Excel comillas dobles que se escapan dentro del contenido de la celda)
- Otros programas insertan una sola barra invertida antes del carácter, por lo tanto, una línea que termina en
\
no se considera el final de una línea, sino un carácter de nueva línea dentro de la celda. Una celda puede tener caracteres de nueva línea sin escape siempre que estén precedidos por el carácter de barra invertida. - Otros aún reemplazan una nueva línea con escape de caracteres de estilo C, la secuencia de caracteres real
\n
o\r\n
. En este caso, la celda ha escapado por completo a los caracteres de nueva línea.
El problema se ve agravado por la necesidad potencial de escapar de los caracteres de control (así como de otro contenido (p. ej., "
en #1, y \
en #2+3) y diferentes estilos de escape (por ejemplo, una comilla incrustada podría escaparse como:doble comilla doble ""
o barra invertida-comillas dobles \"
)
Mi consejo :genere un documento de oficina abierta con varias líneas y caracteres de escape clave y vea cómo la oficina abierta genera un CSV
expediente. A partir de ahí, puede decidir cuál de los métodos anteriores usar para las nuevas líneas dentro de las celdas y qué método de escape.
ejemplo de estilo-1 (excel):
#num,str,num
1,"Hello
World",1990
2,"Yes",1991
ejemplo de estilo-2:
#num,str,num
1,Hello \
Word,1990
2,Yes,1991
ejemplo de estilo-3:
#num,str,num
1,Hello \nWorld,1990
2,Yes,1991