web-dev-qa-db-fra.com

Comportement de sauvegarde Excel d'un fichier CSV avec codage UTF8 vs UTF8-Bom

Mes fichiers csv d'origine sont codés avec UTF8-BOM, afin qu'Excel puisse reconnaître les caractères Unicode (si c'est juste encodé 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 option contextuelle vous permet de conserver le formatage original. Cependant, si le fichier est encodé en UTF8-BOM, il est instantané de cliquer sur la sauvegarde. Aucune option ne permet de conserver le formatage. Le fichier CSV fait alors remplacer les virgules par des tabulations.

7
user2945722

Qu'est-ce qui se passe est la suivante.

  1. Excel examine les paramètres régionaux de vos systèmes pour trouver le séparateur de liste configuré, dans votre cas, une virgule. Il est important de souligner ici que CSV n'est pas un format unique et bien défini . N'importe quel séparateur pourrait être utilisé ... (Edit: Eh bien, il existe en fait une ligne directrice qui goupille le séparateur devient une virgule, mais il ne s’agit pas d’une norme contraignante et la directive n’est pas strictement suivie en pratique.)
  2. Ensuite, Excel transforme les données, en mémoire, dans un fichier XLSX. Vous faites votre excellent travail. N'oubliez pas qu'il s'agit en fait 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 faites des canges et cliquez sur Enregistrer. À ce moment, Excel n'a plus de fichier CSV, mais un fichier XLSX, et doit le reconvertir en quelque chose de "CSV-like". Parce qu'il sait que le codage doit être UTF-8 avec BOM, il décide de sauvegarder sous "Texte Unicode" (il le fait sans le mentionner explicitement). Dans ce format, ils utilisent UCS-2 LE avec BOM comme codage et onglet comme séparateur. Ce n'était pas la norme CSV que vous aviez à l'esprit, ni la norme dans laquelle votre fichier d'origine a été formaté. Bizarre et contre-intuitif, mais à proprement parler pas faux.

Alors que peux-tu faire?
En théorie, vous devriez pouvoir utiliser l'option Enregistrer en tant que CSV et définir le codage sur UTF8 dans le menu Outils -> "Options Web" (dans la boîte de dialogue Enregistrer sous). Le seul problème ici est que cela ne semble pas fonctionner correctement. Je suppose que c'est une fonctionnalité cassée. Plus d'informations à ce sujet sur le dépassement de capacité: Excel au format CSV avec encodage UTF8

Alors, que pouvez-vous réellement ?
Il suffit d’utiliser la nomenclature UTF-8, de sauvegarder et d’ouvrir le fichier CSV obtenu pour remplacer tous les onglets par des virgules.

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

12
Wouter