Lu sur leneurone.eu:
Quand on gère des données via une application Web, il est assez courant de vouloir en obtenir un export, ou des rapports structurés, permettant de les traiter en dehors de l’application. Un format souvent utilisé pour ce faire est le format CSV […]
Problème
[…] Un problème intervient quand ces fichiers contiennent des caractères accentués. L’encodage UTF-8 est alors souvent indiqué, surtout si on génère les fichiers par du code et qu’on supporte plusieurs langues. Mais quand une application Web propose un fichier CSV encodé en UTF-8 en téléchargement, qu’on clique sur “Ouvrir” dans la petite pop-up et qu’il s’ouvre dans Excel… Les accents se sont transformés en élégants caractères tels que é. Le problème est assez récurrent, et vient du fait qu’Excel ne détecte pas l’encodage du fichier mais utilise sa valeur par défaut, qui varie en fonction de la langue de l’utilisateur.
Solution 1
Il existe une solution de contournement assez fastidieuse mais néanmoins efficace (description pour Excel 2007) :
- Au lieu de choisir “Ouvrir”, il faut enregistrer le fichier sur le disque.
- Ensuite, ouvrez Excel (sans double cliquer sur le fichier, mais via le menu Démarrer par exemple) et créez un nouveau classeur vierge.
- Dans le menu Données, choisissez “A partir du texte”.
- Dans la fenêtre qui s’affiche, choisissez votre fichier CSV et validez.
- Dans la boîte de dialogue “Origine du fichier”, choisissez “65001 : Unicode (UTF-8)”.
- Choisissez ensuite le délimiteur du fichier (souvent “;”) et validez.
Le fichier devrait s’ouvrir avec le bon encodage, et donc des accents corrects.
Cette méthode est longue, fastidieuse, et inadaptée puisque les utilisateurs ouvrent souvent les fichiers directement par le bouton “Ouvrir” lors du téléchargement, ou en double-cliquant dessus.
Solution 2
Pour contourner ce comportement d’Excel, il faut donc le forcer à utiliser UTF-8 pour ouvrir le fichier. Pour cela, après de nombreuses péripéties et grâce à ce post sur Stackoverflow, il faut insérer un caractère spécial appelé “BOM UTF-8″ (uFEFF) au début du fichier lors de sa génération. Excel (du moins 2003 et 2007 pour ce que j’ai testé) ouvrira ensuite le fichier directement en UTF-8 !
Ce caractère est non imprimable, et n’apparaît donc ni dans Excel, ni si on ouvre le fichier avec un éditeur de texte tel que Notepad++. Il est totalement transparent mais permet de forcer Excel à lire le fichier correctement…
On notera qu’Excel se moque totalement d’un éventuel charset spécifié dans le content type (par exemple “text/csv;charset=utf-8“).