Est-il possible/légal d'encoder en quelque sorte des caractères CR/LF dans un fichier CSV?
(dans le cadre d'une norme CSV?)
Si oui, comment dois-je encoder CR/LF?
Oui, vous devez mettre entre guillemets:
"some value
over two lines",some other value
De ce document , qui est la norme CSV généralement acceptée:
Un champ contenant des sauts de ligne intégrés doit être entouré de guillemets doubles
la variante la plus courante de csv qui est compatible avec Excel permettra des sauts de ligne intégrés tant que le champ est entouré de guillemets doubles.
foo,bar,"blah blah
more blah blah",baz
ou
foo,bar,"blah blah
more blah blah"
ou
"blah blah
more blah blah",baz
sont tous valides. Ce mécanisme permet également des virgules intégrées.
L'utilisation de guillemets autour de champs textuels sans nouvelles lignes (ou virgules) intégrées est également très bien. Si le texte lui-même contient un guillemet double, alors le mécanisme pour l'échapper est de mettre deux ensemble, par exemple.
foo,bar,"this person said ""blah blah
more blah blah""",baz
Écrire un lecteur csv qui gère cela correctement peut être délicat (surtout si vous comptez sur des expressions régulières).
On a évoqué ici une norme pour le CSV. J'aimerais en savoir plus à ce sujet - les seules normes que je connaisse sont
tout ce qu'Excel accepte
le RFC à www.rfc-editor.org/rfc/rfc4180.txt
Je ne pense pas que cela fasse partie de la norme (s'il y en a même une), mais vous pouvez utiliser un échappement de style C standard, c'est-à-dire encoder\r\n.
Gardez à l'esprit, cependant, que si vous le faites, vous devez également encoder le caractère d'échappement - c'est-à-dire\cède\après le décodage.