Les fichiers CSV expliqués : séparateurs, guillemets, encodage et Excel

Mis à jour :

Un fichier CSV est du texte brut : un enregistrement par ligne, avec des valeurs séparées par des virgules. Presque toutes les bases de données, tous les tableurs et tous les services en ligne savent l’exporter, ce qui en fait le moyen habituel de faire passer un tableau d’un logiciel à un autre. Il est aussi facile de se tromper, car le CSV était utilisé bien avant que quelqu’un ne le mette par écrit, et les logiciels ne s’accordent toujours pas sur les détails.

Cette partie de la série présente les règles du CSV, les problèmes de séparateur et de guillemets qui coupent les valeurs au mauvais endroit, l’encodage des caractères, ce que les tableurs modifient à l’ouverture d’un fichier et un risque à connaître quand on exporte des données que d’autres ouvriront.

Les règles du CSV

Il n’existe pas de norme officielle unique. Le texte le plus proche est la RFC 4180, publiée en octobre 2005, qui décrit le format utilisé par la plupart des logiciels et enregistre le type de média text/csv. C’est un document informatif, pas une norme Internet, et il fixe ces règles :

Tout le reste varie. La Bibliothèque du Congrès des États-Unis, qui recense les formats de fichier pour la conservation à long terme, cite des écarts courants : points-virgules à la place des virgules, sauts de ligne avec seulement LF ou seulement CR, barres obliques inverses ou guillemets simples à la place des guillemets doubles, et différentes façons de traiter les espaces. Un fichier peut donc être un CSV valide pour le logiciel qui l’a écrit et être mal lu par un autre.

Virgules, points-virgules et tabulations

Là où la virgule sert de séparateur décimal, comme dans une grande partie de l’Europe et de l’Amérique du Sud, une virgule entre les valeurs entrerait en conflit avec des nombres comme 1,20. Les fichiers créés dans ces pays utilisent souvent le point-virgule. Excel suit les paramètres régionaux de l’ordinateur : Microsoft indique que définir la virgule comme séparateur décimal fait utiliser le point-virgule comme séparateur de liste.

C’est la raison habituelle pour laquelle un fichier s’ouvre avec tout dans la première colonne : il a été écrit avec un séparateur et lu avec un autre. Le même tableau, avec une virgule décimale dans le prix (la barre oblique marque un saut de ligne) :

Les fichiers séparés par des tabulations évitent l’essentiel de ces problèmes, car les tabulations apparaissent rarement dans les valeurs. Ils portent souvent l’extension .tsv ou .txt plutôt que .csv.

Les guillemets : la règle qui compte le plus

Beaucoup de CSV cassés viennent d’une valeur qui aurait dû être entre guillemets et ne l’était pas, ou d’un guillemet jamais refermé. Ces exemples suivent la RFC 4180 :

Si vous écrivez vous-même un CSV, placez entre guillemets toute valeur qui contient le séparateur, un guillemet double ou un saut de ligne, et doublez les guillemets qu’elle contient. Mettre toutes les valeurs entre guillemets est aussi permis et évite les surprises.

L’encodage : pourquoi les accents deviennent ã

Un fichier CSV n’indique pas son encodage de caractères. La RFC 4180 note que l’usage courant est l’US-ASCII, qui n’a pas de lettres accentuées, et aujourd’hui la plupart des fichiers sont en UTF-8. L’UTF-8 enregistre des lettres comme ã, é ou € sur deux ou trois octets. Un logiciel qui lit ces octets avec un autre encodage, comme Windows-1252, affiche chaque octet comme un caractère distinct :

Microsoft explique qu’Excel n’ouvre correctement un CSV en UTF-8 par double-clic que si le fichier commence par une marque d’ordre des octets (BOM), trois octets invisibles qui annoncent l’UTF-8. Sans elle, Microsoft recommande d’importer le fichier, avec Données > À partir d’un fichier texte/CSV. Si vous voyez ce même désordre dans un fichier que vous avez créé, il a été enregistré dans un encodage et ouvert dans un autre.

Ce que les tableurs modifient à l’ouverture d’un CSV

Quand Excel ouvre directement un fichier .csv, il devine le type de chaque valeur avec ses paramètres par défaut. Microsoft documente ce que cela fait aux données qui ressemblent seulement à un nombre ou à une date :

Valeur dans le CSVAprès ouverture dans ExcelPourquoi
0077Les zéros en tête des nombres sont supprimés.
12345678901234561234567890123450, en notation scientifiqueExcel conserve 15 chiffres significatifs ; les suivants deviennent des zéros.
SEPT22-SepLu comme une date (2 septembre).
MARCH11-MarLu comme une date (1er mars).

Les modifications restent si le fichier est enregistré de nouveau. Les noms de gènes du tableau sont de vrais exemples : une étude publiée en 2016 dans Genome Biology a trouvé ces conversions dans environ un cinquième des articles qui publiaient des listes de gènes dans des fichiers Excel, et en 2019 le comité de nomenclature des gènes HUGO a renommé les gènes SEPT et MARCH en SEPTIN et MARCHF pour cette raison. Les codes postaux, les numéros de téléphone, les références de produits et les identifiants longs subissent le même sort.

Pour garder les valeurs telles quelles, importez le fichier au lieu de l’ouvrir : Données > À partir d’un fichier texte/CSV, puis Modifier pour ouvrir Power Query, sélectionnez les colonnes et choisissez le type de données Texte. Microsoft suggère aussi de renommer le fichier de .csv en .txt avant de l’ouvrir, ce qui lance l’assistant d’importation de texte, où vous choisissez comment chaque colonne est lue. Les versions récentes d’Excel pour Microsoft 365 et d’Excel 2024 ont aussi des options de conversion automatique des données qui permettent de désactiver certaines de ces modifications.

Un risque à l’export : l’injection de formules

Les tableurs peuvent lire comme une formule une valeur qui commence par =, +, - ou @. Si un site web exporte du texte saisi par des utilisateurs, comme des noms ou des commentaires, une valeur écrite comme une formule peut s’exécuter comme telle quand quelqu’un ouvre le fichier, au lieu de s’afficher comme du texte. Le catalogue des faiblesses logicielles de MITRE la répertorie sous le nom CWE-1236 ; on parle plus souvent d’injection CSV ou de formules.

Cela concerne les logiciels qui écrivent des fichiers CSV à partir de données non fiables. La défense habituelle consiste à placer une apostrophe (') devant toute valeur qui commence par l’un de ces caractères, même si MITRE note qu’aucune solution ne fonctionne dans tous les tableurs. Si vous recevez un CSV d’une source inconnue, regardez-le dans un éditeur de texte ou importez-le en texte avant de vous fier à ce qu’affiche le tableur.

CSV ou JSON ?

Le CSV est un tableau plat sans types : chaque valeur est du texte jusqu’à ce qu’un logiciel en décide autrement. Le JSON, sujet de la première partie de cette série, a des nombres, true, false, null, des listes et des objets imbriqués. Le CSV est plus compact et s’ouvre dans n’importe quel tableur ; le JSON est ce qu’utilisent la plupart des API web. Passer de l’un à l’autre oblige à décider quoi faire de ces différences.

Le convertisseur nTools garde chaque valeur du CSV en texte, si bien que 007 et les identifiants longs arrivent intacts, et transforme les valeurs JSON imbriquées en texte JSON dans une seule cellule. Il lit les données séparées par des virgules, des points-virgules ou des tabulations, suit les règles de guillemets ci-dessus, signale un guillemet jamais refermé et fonctionne entièrement dans votre navigateur.

Convertisseur CSV ↔ JSON

Questions fréquentes

Pourquoi mon CSV s’ouvre-t-il avec tout dans une seule colonne ?

Le fichier utilise un autre séparateur que celui attendu par le logiciel, en général un point-virgule lu comme s’il s’agissait de virgules, ou l’inverse. Importez-le et choisissez le séparateur au lieu de l’ouvrir par double-clic.

Pourquoi les accents sont-ils illisibles à l’ouverture d’un CSV ?

Le fichier est en UTF-8 et a été lu avec un autre encodage. Dans Excel, importez-le avec Données > À partir d’un fichier texte/CSV au lieu de l’ouvrir par double-clic, ou enregistrez-le en UTF-8 avec une marque d’ordre des octets.

Comment garder les zéros en tête en ouvrant un CSV dans Excel ?

Importez le fichier au lieu de l’ouvrir par double-clic, et mettez en Texte les colonnes qui contiennent des codes, des codes postaux ou des numéros de téléphone avant de le charger.

Un fichier CSV peut-il avoir plusieurs feuilles ou une mise en forme ?

Non. Il contient un seul tableau de texte brut. Quand vous enregistrez un classeur en CSV, Excel n’enregistre que la feuille active, et ce que le texte brut ne peut pas contenir, comme la mise en forme et les graphiques, est perdu.

Un fichier séparé par des points-virgules est-il encore un CSV ?

Au sens strict, la RFC 4180 ne décrit que les virgules, mais les fichiers à points-virgules sont courants et la plupart des logiciels les acceptent quand on choisit le séparateur.

Le convertisseur nTools envoie-t-il mes données ?

Non. La conversion se fait dans votre navigateur et les données ne sont envoyées nulle part.

Suite de la série Les encodages de texte expliqués : UTF-8, Base64 et encodage d’URL →

Références

  1. RFC 4180 — Common Format and MIME Type for Comma-Separated Values (CSV) Files
  2. Library of Congress — CSV, Comma Separated Values (RFC 4180)
  3. Microsoft Support — Import or export text (.txt or .csv) files
  4. Microsoft Support — Keeping leading zeros and large numbers
  5. Microsoft Support — Opening CSV UTF-8 files correctly in Excel
  6. Ziemann, Eren and El-Osta — Gene name errors are widespread in the scientific literature (Genome Biology, 2016)
  7. HUGO Gene Nomenclature Committee — Summer newsletter 2020
  8. MITRE — CWE-1236: Improper Neutralization of Formula Elements in a CSV File

Guides associés