A especificação CSV é um que eu acho implementado de muitas maneiras diferentes ... basicamente parece que é apenas metade das especificações, o que é frustrante, devido à sua popularidade.
Para incluir uma nova linha dentro de uma célula em um CSV, a célula pode precisar ser encapsulada ou a nova linha pode precisar ser escapada. Você notará no documento vinculado que existem três maneiras de fazer isso - e programas diferentes o tratam de maneira diferente:
- O Excel envolve a célula inteira entre aspas duplas:uma célula pode ter caracteres de nova linha (sem escape) dentro dela e ser considerada uma única célula, desde que esteja entre aspas duplas (observe também que você precisará usar o estilo do Excel aspas duplas escapando dentro do conteúdo da célula)
- Outros programas inserem uma única barra invertida antes do caractere, portanto, uma linha que termina em
\
não é considerado o fim de uma linha, mas um caractere de nova linha dentro da célula. Uma célula pode ter caracteres de nova linha sem escape, desde que sejam precedidos pelo caractere de barra invertida. - Outros ainda substituem uma nova linha por escape de caractere no estilo C, a sequência de caracteres real
\n
ou\r\n
. Nesse caso, a célula tem caracteres de nova linha totalmente escapados.
O problema é agravado pela necessidade potencial de escapar dos caracteres de controle (assim como outros conteúdos (por exemplo,
"
em #1 e \
em #2+3) e diferentes estilos de escape (por exemplo, uma aspa incorporada pode ser escapada como:aspas duplas ""
ou aspas duplas de barra invertida \"
) Meu conselho :gere um documento open-office com várias linhas e caracteres de escape de chave e veja como o open-office gera um
CSV
Arquivo. A partir daí, você pode decidir qual dos métodos acima usar para novas linhas dentro das células e qual método de escape. exemplo de estilo-1 (excel):
#num,str,num
1,"Hello
World",1990
2,"Yes",1991
exemplo de estilo-2:
#num,str,num
1,Hello \
Word,1990
2,Yes,1991
exemplo de estilo 3:
#num,str,num
1,Hello \nWorld,1990
2,Yes,1991