15 votes

Comportement de sauvegarde Excel du fichier CSV avec encodage UTF8 par rapport à l'encodage UTF8-Bom

Mes fichiers csv originaux sont encodés avec UTF8-BOM, c'est ainsi qu'Excel peut reconnaître les caractères Unicode (s'ils sont simplement encodés avec UTF8, Excel ne reconnaît pas les caractères unicode).

Mon problème est qu'avec un fichier CSV encodé en UTF8, lorsque vous cliquez sur Enregistrer dans Excel, une fenêtre contextuelle vous donne l'option de conserver le format original. Cependant, si le fichier est encodé en UTF8-BOM, cliquer sur Enregistrer est instantané et il n'y a pas d'option pour conserver le format. Le fichier CSV a alors ses virgules remplacées par des tabulations.

21voto

Wouter Points 1441

Ce qui se passe est le suivant.

  1. Excel regarde les paramètres régionaux de votre système pour trouver quel séparateur de liste est configuré, dans votre cas, une virgule. Il est important de souligner que le CSV n'est pas un format unique et bien défini. N'importe quel séparateur pourrait être utilisé... (Édition : Eh bien, il y a en fait une ligne directrice qui fixe le séparateur comme étant une virgule, mais ce n'est pas une norme contraignante, et la ligne directrice n'est pas strictement suivie en pratique.)
  2. Ensuite, Excel transforme les données, en mémoire, en un fichier XLSX. Vous effectuez vos actions spécifiques à Excel. Gardez à l'esprit qu'il s'agit effectivement d'une conversion de type de fichier, et qu'Excel ne se souvient pas de l'encodage de votre fichier source, ni du séparateur utilisé.
  3. Vous apportez des modifications, puis cliquez sur Enregistrer. À ce moment-là, Excel n'a plus de fichier CSV, mais un fichier XLSX, et doit le convertir en quelque chose de "CSV-like". Parce qu'il sait que l'encodage doit être UTF-8 avec BOM, il décide d'Enregistrer sous "Texte Unicode" (il le fait sans explicitement le mentionner). Dans ce format, ils utilisent UCS-2 LE avec BOM comme encodage, et la tabulation comme séparateur. Ce n'est pas la norme CSV à laquelle vous pensiez, ni la norme selon laquelle votre fichier d'origine était formaté. C'est étrange et contre-intuitif, mais strictement parlant, ce n'est pas incorrect.

Alors, que pouvez-vous faire ?
En théorie, vous devriez pouvoir utiliser l'option Enregistrer sous CSV, et grâce au menu Outils->"Options Web" (dans la boîte de dialogue Enregistrer sous) définir l'encodage sur UTF-8. Le seul problème ici est que cela ne semble pas fonctionner correctement. Je suppose que c'est une fonctionnalité brisée. Plus d'informations sur Stack Overflow : Excel to CSV with UTF-8 encoding

Alors, que pouvez-vous vraiment faire ?
Utilisez simplement le BOM UTF-8, enregistrez, et ouvrez le fichier CSV résultant pour remplacer toutes les tabulations par des virgules.

Et que devriez-vous vraiment faire ?
N'utilisez pas Excel pour charger et modifier des fichiers CSV. Ou du moins, soyez beaucoup plus prudent à ce sujet...
Pourquoi pas ?
J'ai écrit un (trop long) article à ce sujet ici.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X