Forcer l’ouverture d’un CSV en UTF-8

Vous avez généré un csv tout beau tout propre pour votre dernière application web. Vous avez bien mis les headers en UTF-8.

En témoigne ce code PHP :

header("Content-Type: application/force-download; charset=UTF-8"); 
header("Content-Length: " . filesize($fichier)); 
header("Content-Disposition: attachment; filename=" . $fichier);

Vous êtes content·e, vous êtes fier·e. Vous pouvez l’être. C’est classe, le csv. Presque autant que le json (avis personnel).

Et vous l’ouvrez dans Excel (ou dans LibreOffice Calc :3 ).

Ouverture d'un csv dans Calc

Vos beaux accents. Vos caractères spéciaux… Disparus dans les limbes. Parce que Excel  et Calc ne se basent pas sur le jeu de caractères gracieusement fourni dans le header Content-Type, mais sur la langue de l’OS sur lequel ils sont installés. Crétins.

Alors, bien sûr, on peut changer le jeu de caractères d’ouverture (première liste dans Calc, voir capture), mais ça c’est l’utilisateur final qui s’en occupe, et si ce n’est pas automatique il ne le fera pas, ne nous faisons pas d’illusions…

Eh bien, séchez vos larmes, développeur·se mon ami·e, mon·ma frère·sœur : il y a une solution. Si vous faites du web, on vous a seriné : « enregistre bien tes fichiers php et html en UTF-8 sans BOM ! », parce que sinon le BOM (Byte Order Mark) apparaît sur la page, c’est un caractère invisible mais il fiche bien le dawa, surtout dans le head d’une page html. Ici, au contraire, c’est lui qui va nous sauver.

En effet, Excel et Calc ne lisent certes pas le Content-Type, mais ils lisent le contenu du fichier (quoi de plus normal), et leur comportement change s’ils rencontrent un BOM-

A wild BOM appears!

Heum. Pardon.

Il suffira d’ajouter au tout début du fichier ceci :


"\xEF\xBB\xBF"

de la manière de votre choix, par exemple en php, soit dans un fputs tout seul, soit concaténé avec le reste de votre csv en devenir. Notez bien les guillemets doubles, en php c’est comme le caractère de saut de ligne, ça ne sera pas interprété si c’est entre guillemets simples. Et c’est tout ! Votre fichier s’ouvrira par défaut en UTF-8.

Ouverture csv dans Calc, victoire !

Sources :

  1. Bonjour,
    Je rencontre également quelques difficultés pour afficher les accents dans un CSV ouvert avec excel 2010.
    En fait j’obtiens des résultats différents selon l’environnement. Dans l’un les accents s’affichent correctement et dans l’autre environnement les accents sont mal interprétés.
    Je développe en java et j’ai donc ajouté le fameux bom UTF-8 au début de mon flux… mais les caractères auparavant correctement accentués avant s’affichent en chinois !
    Malgré mes recherches sur internet, je n’ai pas trouvé de réponse à ce problème.
    Si quelqu’un pouvait éclairer ma lanterne … Merci d’avance.