La spécification CSV est celui que je trouve implémenté de différentes manières... il semble fondamentalement qu'il ne soit qu'à moitié spécifié, ce qui est frustrant compte tenu de sa popularité.
Pour inclure une nouvelle ligne dans une cellule d'un fichier CSV, il peut être nécessaire d'envelopper la cellule ou d'échapper la nouvelle ligne. Vous remarquerez dans le document lié qu'il existe trois façons de procéder - et que différents programmes le traitent différemment :
- Excel place toute la cellule entre guillemets :une cellule peut contenir des caractères de retour à la ligne (sans échappement) et être considérée comme une seule cellule, tant qu'elle est entourée de guillemets (notez également que vous devrez utiliser le style Excel guillemet double s'échappant dans le contenu de la cellule)
- D'autres programmes insèrent une seule barre oblique inverse avant le caractère, donc une ligne se terminant par
\
n'est pas considéré comme la fin d'une ligne, mais comme un caractère de saut de ligne dans la cellule. Une cellule peut contenir des caractères de retour à la ligne non échappés tant qu'ils sont précédés du caractère barre oblique inverse. - D'autres remplacent toujours une nouvelle ligne par un caractère de style C s'échappant, la séquence de caractères réelle
\n
ou\r\n
. Dans ce cas, la cellule contient des caractères de retour à la ligne entièrement échappés.
Le problème est aggravé par le besoin potentiel d'échapper les caractères de contrôle (ainsi que d'autres contenus (par exemple "
dans #1, et \
dans #2+3) et différents styles d'échappement (par exemple, un guillemet intégré peut être échappé comme :double guillemet double ""
ou antislash-guillemets doubles \"
)
Mon conseil :générez un document open-office avec plusieurs lignes et des caractères d'échappement clés et voyez comment open-office génère un CSV
dossier. À partir de là, vous pouvez décider laquelle des méthodes ci-dessus utiliser pour les retours à la ligne dans les cellules et quelle méthode d'échappement.
exemple de style-1 (excel) :
#num,str,num
1,"Hello
World",1990
2,"Yes",1991
exemple de style-2 :
#num,str,num
1,Hello \
Word,1990
2,Yes,1991
exemple de style-3 :
#num,str,num
1,Hello \nWorld,1990
2,Yes,1991