636 votes

Est-il possible de forcer Excel à reconnaître automatiquement les fichiers CSV UTF-8 ?

Je développe une partie d'une application qui est responsable de l'exportation de certaines données dans des fichiers CSV. L'application utilise toujours UTF-8 en raison de sa nature multilingue à tous les niveaux. Mais l'ouverture de tels fichiers CSV (contenant par exemple des diacritiques, des lettres cyrilliques, des lettres grecques) dans Excel ne donne pas les résultats escomptés, montrant quelque chose comme „/¤, –/¶ . Et je ne sais pas comment forcer Excel à comprendre que le fichier CSV ouvert est encodé en UTF-8. J'ai également essayé de spécifier la nomenclature UTF-8 EF BB BF mais Excel n'en tient pas compte.

Existe-t-il une solution de contournement ?

P.S. Quels outils peuvent potentiellement se comporter comme Excel ?


UPDATE

Je dois dire que j'ai dérouté la communauté avec la formulation de la question. Lorsque j'ai posé cette question, j'ai demandé un moyen d'ouvrir un fichier CSV UTF-8 dans Excel sans aucun problème pour l'utilisateur, de manière fluide et transparente. Cependant, j'ai utilisé une mauvaise formulation en demandant de le faire automatiquement . C'est très déroutant et cela s'oppose à l'automatisation des macros VBA. Il y a deux réponses à cette question que j'apprécie le plus : la toute première réponse d'Alex https://stackoverflow.com/a/6002338/166589 et j'ai accepté cette réponse ; et la deuxième par Mark https://stackoverflow.com/a/6488070/166589 qui sont apparus un peu plus tard. Du point de vue de la facilité d'utilisation, Excel semblait manquer d'un bon support CSV UTF-8 convivial. les deux Les réponses sont correctes, et j'ai accepté la réponse d'Alex en premier parce qu'il a vraiment indiqué qu'Excel n'était pas capable de faire cela de manière transparente. C'est ce que j'ai confondu avec automatiquement ici. La réponse de Mark propose une méthode plus compliquée pour les utilisateurs plus avancés afin d'obtenir le résultat escompté. Les deux réponses sont excellentes, mais celle d'Alex répond un peu mieux à ma question qui n'est pas clairement spécifiée.


MISE À JOUR 2

Cinq mois après la dernière modification, j'ai remarqué que la réponse d'Alex a disparu pour une raison quelconque. J'espère vraiment qu'il ne s'agissait pas d'un problème technique et j'espère qu'il n'y aura plus de discussion sur la meilleure réponse à donner maintenant. J'accepte donc la réponse de Mark comme étant la meilleure.

1 votes

Pouvez-vous utiliser des fichiers délimités par des tabulations ? Si oui, vous aurez peut-être plus de chance.

11 votes

Office 2010+ : les meilleurs travaux : UTF-16LE avec BOM et \t comme délimiteur. Fonctionne dans un environnement Excel anglais et non anglais. Peut appuyer sur Ctrl-S sans sélectionner le format du fichier, etc. Préserve les caractères Unicode.

0 votes

@Duncan franchement parlant, je suis confus et il est difficile de "juger". J'ai accepté la réponse d'Alex il y a plus de deux ans (questions et réponses du 14 mai), puis Mark a répondu en suggérant une solution de contournement délicate (je ne l'ai pas vérifiée) qui, étonnamment, a marqué plus de points que ma question, qui, elle aussi, est devenue populaire. Nous avons en fait refusé le support d'Excel dans mon projet il y a longtemps, et je ne veux pas enlever le score de réputation d'Alex, parce qu'Excel semblait, et semble probablement encore (s'il vous plaît corrigez-moi si je me trompe), mal gérer les CSV. C'est difficile à dire, désolé.

501voto

Mark Points 816

Alex a raison, mais comme vous devez exporter au format csv, vous pouvez donner ce conseil aux utilisateurs lorsqu'ils ouvrent les fichiers csv :

  1. Enregistrez le fichier exporté en tant que csv.
  2. Ouvrir Excel
  3. Importez les données en utilisant Data-->Importation de données externes --> Importation de données
  4. Sélectionnez le type de fichier "csv" et naviguez jusqu'à votre fichier.
  5. Dans l'assistant d'importation, changez le File_Origin en "65001 UTF" (ou choisissez l'identifiant de caractère de la langue correcte).
  6. Changez le délimiteur en virgule
  7. Sélectionnez l'endroit où importer et terminez

De cette façon, les caractères spéciaux devraient s'afficher correctement.

2 votes

Il s'agit d'une solution de contournement qui ne répond pas à la question. La question était de savoir comment nous pouvons créer des fichiers csv et qu'Excel sélectionne automatiquement le bon encodage.

224voto

StriplingWarrior Points 56276

Le marqueur d'ordre des octets UTF-8 permettra à Excel 2007+ de savoir que vous utilisez UTF-8. (Voir ce poste SO ).

Au cas où quelqu'un aurait les mêmes problèmes que moi, la classe d'encodage UTF8 de .NET n'affiche pas de marqueur d'ordre d'octet dans un fichier de type GetBytes() appel. Vous devez utiliser les cours d'eau (ou utiliser une solution de contournement ) pour obtenir la nomenclature en sortie.

0 votes

Merci pour le lien du post (je ne connaissais pas l'affaire UTF-16).

31 votes

L'insertion d'une nomenclature UTF-8 semble être la solution. Après cela, c'est transparent.

0 votes

Merci beaucoup. C'est bien mieux que d'essayer de deviner l'encodage dont excel est friand.

93voto

sshturma Points 188

Le bug de la nomenclature ignorée semble être corrigé pour Excel 2013. J'avais le même problème avec les lettres cyrilliques, mais en ajoutant le caractère BOM \uFEFF a aidé.

9 votes

Depuis que j'ai ajouté \uFEFF au début de mon fichier CSV (généré en Java), Excel est capable de les ouvrir correctement ! Thx

21 votes

Cela a résolu mon problème aussi, en php cela ressemble à ceci : $utf8_with_bom = chr(239) . chr(187) . chr(191) . $csvText ;

0 votes

@updola merci beaucoup pour ce commentaire, cela m'a fait gagner des heures.

60voto

e-zinc Points 2480

Nous avons utilisé cette solution de contournement :

  1. Convertir CSV en UTF-16 LE
  2. Insérer la nomenclature au début du fichier
  3. Utiliser la tabulation comme séparateur de champ

2 votes

Merci ! J'ai essayé toutes les autres réponses dans ce fil, mais la conversion en UTF-8 n'a tout simplement pas fonctionné. Lorsque j'ai essayé UTF-16 avec BOM, cela a fonctionné instantanément.

0 votes

Pour Excel pour Mac 2011, j'ai réussi à utiliser des fichiers csv UTF-16 little endian.

0 votes

Merci, cette solution est excellente pour donner à mes utilisateurs un csv unicode qu'ils peuvent ouvrir dans Excel.

14voto

Steve Jessop Points 166970

J'ai eu le même problème dans le passé (comment produire des fichiers qu'Excel peut lire, et que d'autres outils peuvent également lire). J'utilisais TSV plutôt que CSV, mais le même problème d'encodage se posait.

Je n'ai pas trouvé le moyen de faire reconnaître automatiquement l'UTF-8 par Excel, et je n'ai pas voulu ou pu infliger aux consommateurs des fichiers des instructions compliquées pour les ouvrir. Je les ai donc encodés en UTF-16le (avec une BOM) au lieu d'UTF-8. Ils font deux fois plus de taille, mais Excel peut reconnaître l'encodage. Et ils se compressent bien, donc la taille importe rarement (mais malheureusement pas jamais).

0 votes

C'est une vieille question, mais je suis heureux que les gens y répondent encore. Merci. :)

1 votes

@LyubomyrShaydariv : depuis que j'ai répondu à cette question, un collègue m'a dit que le dernier Excel identifie les fichiers CSV UTF-8 à condition qu'ils aient une nomenclature initiale. Donc dans quelques années, quand tout le monde (ou en tout cas, tous ceux à qui nous livrons les fichiers) sera sur cette version d'Excel ou mieux, je pourrai peut-être changer mon encodage :-)

0 votes

Bizarre, pour moi ça ne marche pas. Il transforme les caractères en symboles chinois... (ils sont censés être hébreux)

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X