Les fichiers CSV UTF-8 doivent-ils contenir une nomenclature (BOM)?

37

Notre logiciel métier permet à l'utilisateur de sauvegarder certaines données au format CSV . Comme il existe de nombreux formats différents (tous appelés "CSV") utilisés dans la nature, nous essayons de décider à quoi devrait ressembler le "format par défaut".

  • En ce qui concerne les séparateurs de ligne / champ et l’échappement, il existe une norme que nous pouvons utiliser: RFC 4180 .

  • En ce qui concerne le codage de texte, UTF-8 semble être devenu le "format de fichier texte par défaut" au cours de la dernière décennie, nous allons donc l'utiliser.

La seule question laissée ouverte est la suivante: devons-nous ajouter une nomenclature au début ou non? J'ai lu plusieurs avis et avantages / inconvénients sur l'utilisation des nomenclatures en général, mais existe-t-il une recommandation "officielle" ou au moins une sorte de consensus de la communauté sur l'utilisation des nomenclatures dans les fichiers CSV?

Heinzi
la source
7
S'il a une nomenclature, alors ce n'est pas UTF-8. Mais quel format les programmes veulent-ils? S'ils ont besoin d'une nomenclature (principalement une micro-paresse), vous devez en ajouter une, mais UTF-8 + BOM ≠ UTF-8.
ctrl-alt-delor
3
Même si, apparemment, le format CSV est plus facile à générer, il y a tellement de problèmes de compatibilité, en particulier si vous vous écartez du pur ASCII 7 bits, que je vous recommande vivement de générer le XLSX réel si vous souhaitez que les utilisateurs l'ouvrent. dans Excel (plutôt que de le réimporter dans un autre logiciel, auquel cas vous devrez donner des options pour les séparateurs, le codage, etc.). Il existe des bibliothèques pour la plupart des langues, et vous épargnerez beaucoup de temps à vous et à vos utilisateurs.
jcaron
2
Si vous prenez la route CSV, vérifiez ce qui se produit lorsque vous ouvrez le fichier sur Mac et PC, idéalement avec plusieurs versions d'Excel. Sachez également que certaines versions d'Excel ne se comportent pas de la même façon lorsque vous double-cliquez sur le fichier pour l'ouvrir ou que vous l'ouvriez via le menu.
jcaron
2
Pourquoi est-ce important si elle s'ouvre correctement dans Excel? Rien dans la question n'indique qu'Excel doit pouvoir analyser le fichier généré ...
rubenvb

Réponses:

55

Pas pour UTF-8 , mais voyez les différentes mises en garde dans les commentaires.

C'est inutile (UTF-8 n'a pas d'ordre sur les octets) contrairement à UTF-16/32 et n'est pas recommandé dans la norme Unicode . Il est également assez rare de voir UTF-8 avec une nomenclature "à l'état sauvage". Par conséquent, sauf si vous avez une raison valable (par exemple, vous travaillerez avec un logiciel qui attend la nomenclature). Je recommanderais l'approche sans nomenclature. .

Wikipedia mentionne des logiciels principalement Microsoft qui obligent et attendent une nomenclature, mais si vous ne les utilisez pas, ne les utilisez pas.

Kayaman
la source
28
Il existe également un logiciel répandu nécessitant une nomenclature: Excel nécessite une nomenclature pour identifier correctement un fichier CSV en tant que UTF-8 plutôt que "ANSI", c'est-à-dire les paramètres régionaux de compatibilité locaux. (Mais Excel fait aussi des choses étranges lors de la sauvegarde d'un tel fichier. Nous conseillons donc aux utilisateurs d'utiliser notre "véritable" export Excel au lieu de l'export CSV s'ils souhaitent ouvrir le fichier avec Excel.)
Heinzi
21
@Heinzi J'ai appris il y a longtemps qu'il est impossible de gagner quand on travaille avec CSV et Excel. C'est simplement un mauvais lecteur CSV. Dommage, c'est ce que les utilisateurs normaux attendent.
pipe
9
@Voo: Exiger une nomenclature pour UTF-8 est certainement contraire à la norme, car elle n'est " ni requise ni recommandée ".
Deduplicator
12
@Duplicator: Les systèmes MS-DOS et Windows ont une grande base de fichiers texte hérités dans des codages autres que UTF-8. Les applications de qualité permettent à un utilisateur de spécifier le mode de codage d'un fichier texte lors de son ouverture, mais incluent souvent une option "auto". Si un utilisateur sélectionne "UTF-8", un fichier UTF-8 sera ouvert correctement avec ou sans nomenclature. Si un utilisateur sélectionne "auto", certains fichiers UTF-8 qui ne possèdent pas de nomenclature peuvent être confondus avec l'utilisation d'un autre codage. Je ne suis pas sûr de ce que l'on pourrait attendre d'une application de la même manière, car les fichiers "mal identifiés" pourraient être identiques, d'un bit à l'autre ...
Supercat
7
@Voo: Cela entre en conflit avec de nombreuses autres exigences spécifiques à un format dans lesquelles une nomenclature est illégale. Par exemple, un script de shell avec une nomenclature antérieure à #!n'est pas valide. Au mieux, une nomenclature dans UTF-8 est "autorisée, lorsqu'aucune exigence spécifique au format / à l'application ne l'exclut", pas "autorisée", et en tant que telle, elle ne doit pas être utilisée. Les normes sont en fait claires sur le NE DEVRAIT PAS.
R ..
8

Il n’existe pas encore de convention largement répandue selon les critères AFAIK, bien que UTF-8 soit maintenant généralement accepté.

La nomenclature est un artefact terrible:

Il est invisible (espace de largeur zéro).

Certains logiciels peuvent tomber en panne sur le nom de la première colonne ne contenant pas uniquement des lettres, mais cette étrange nomenclature devant.

La ligne d'en-tête pourrait peut-être être copiée pour des lignes de valeur altérant la première valeur.

Certains logiciels Windows n’ont besoin que de faire la distinction entre l’un des encodages ANSI utilisés par cette machine Windows locale et UTF-8. Bloc-notes, Excel.

La chose la plus triste est qu’il faille soutenir la nomenclature. Peut-être facultatif.

Utilisez un schéma de nommage pour les fichiers (...-utf8.txt, ...-utf8bom.txt).


Dans de nombreux cas, nous pourrions utiliser HTML comme alternative à l'exportation. Cela permet de définir le codage dans le fichier. Une fonctionnalité supplémentaire est la coloration de fond / premier plan des lignes et des cellules. Ce qui rehausse la qualité de l'exportation.

Joop Eggen
la source
15
Que le formatage "augmente la qualité de l'exportation" dépend énormément de l'utilisation prévue du fichier. Le format CSV est souvent utilisé comme un simple format lisible par une machine . Dans ce cas, il serait très désavantageux d' analyser le code HTML du destinataire .
IMSoP
5
Si vous choisissez un schéma de nommage, gardez le public à l'esprit. -utf8-windows.csvest mieux. Presque tout le monde sait ce qu'est Windows dans le contexte des ordinateurs, mais beaucoup moins d'utilisateurs savent ce qu'est une marque d'ordre des octets.
MSalters
2
@ Davislor oui s'il s'agit d'une norme largement connue. Sinon, des rapports d'erreur viendront sur le fait d' tschüßêtre gâchis alors qu'ils tschüßauraient dû être écrits. Sur StackOverflow, de nombreuses erreurs informatiques concernent des encodages. Les utilisateurs finaux rencontreront également des problèmes.
Joop Eggen
3
@JoopEggen "norme connue largement communiquée" dans quelle communauté exactement? Je développe des logiciels depuis près de 10 ans et je ne l’ai jamais vu - pas même sous Windows, et certainement pas sous Linux ou OSX, où l’on traite presque toujours avec utf-8.
Cubique
1
@JustinTime oui depuis quelques années, mais pas avant. Les développeurs MS ne sont pas si mauvais (conformité Posix, maintenant supporté par UTF-8).
Joop Eggen