{"id":237,"date":"2013-06-25T15:07:47","date_gmt":"2013-06-25T14:07:47","guid":{"rendered":"http:\/\/sphinx.lamecarlate.net\/?p=237"},"modified":"2018-09-30T17:56:39","modified_gmt":"2018-09-30T16:56:39","slug":"forcer-louverture-dun-csv-en-utf-8","status":"publish","type":"post","link":"https:\/\/informatique.lamecarlate.net\/articles\/forcer-louverture-dun-csv-en-utf-8","title":{"rendered":"Forcer l’ouverture d’un CSV en UTF-8"},"content":{"rendered":"
Vous avez g\u00e9n\u00e9r\u00e9 un csv tout beau tout propre pour votre derni\u00e8re application web. Vous avez bien mis les headers en UTF-8.<\/p>\n
En t\u00e9moigne ce code PHP :<\/p>\n
header(\"Content-Type: application\/force-download; charset=UTF-8\"); \nheader(\"Content-Length: \" . filesize($fichier)); \nheader(\"Content-Disposition: attachment; filename=\" . $fichier);\n<\/code><\/pre>\nVous \u00eates content\u00b7e, vous \u00eates fier\u00b7e. Vous pouvez l’\u00eatre. C’est classe, le csv. Presque autant que le json (avis personnel).<\/p>\n
Et vous l’ouvrez dans Excel (ou dans LibreOffice Calc :3 ).<\/p>\n
<\/p>\n
Vos beaux accents. Vos caract\u00e8res sp\u00e9ciaux… Disparus dans les limbes. Parce que Excel\u00a0 et Calc ne se basent pas sur le jeu de caract\u00e8res gracieusement fourni dans le header Content-Type, mais sur la langue de l’OS sur lequel ils sont install\u00e9s. Cr\u00e9tins.<\/p>\n
Alors, bien s\u00fbr, on peut changer le jeu de caract\u00e8res d’ouverture (premi\u00e8re liste dans Calc, voir capture), mais \u00e7a 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…<\/p>\n
Eh bien, s\u00e9chez vos larmes, d\u00e9veloppeur\u00b7se mon ami\u00b7e, mon\u00b7ma fr\u00e8re\u00b7s\u0153ur : il y a une solution. Si vous faites du web, on vous a serin\u00e9 : \u00ab\u00a0enregistre bien tes fichiers php et html en UTF-8 sans BOM !\u00a0\u00bb, parce que sinon le BOM (Byte Order Mark<\/a>) appara\u00eet sur la page, c’est un caract\u00e8re 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.<\/p>\nEn 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-<\/p>\n
\nA wild BOM appears!<\/p>\n<\/blockquote>\n
Heum. Pardon.<\/p>\n
Il suffira d’ajouter au tout d\u00e9but du fichier ceci :<\/p>\n
\n\"\\xEF\\xBB\\xBF\"\n<\/code>\n<\/pre>\nde la mani\u00e8re de votre choix, par exemple en php, soit dans un fputs<\/code> tout seul, soit concat\u00e9n\u00e9 avec le reste de votre csv en devenir. Notez bien les guillemets doubles, en php c’est comme le caract\u00e8re de saut de ligne, \u00e7a ne sera pas interpr\u00e9t\u00e9 si c’est entre guillemets simples. Et c’est tout ! Votre fichier s’ouvrira par d\u00e9faut en UTF-8.<\/p>\n
<\/p>\n
Sources :<\/p>\n
\n- https:\/\/forum.geekzone.fr\/t\/php-export-csv-et-utf8\/51484<\/a> <\/li>\n
- une bonne explication est ici : http:\/\/stackoverflow.com\/questions\/155097\/microsoft-excel-mangles-diacritics-in-csv-files<\/a><\/li>\n<\/ul>\n","protected":false},"excerpt":{"rendered":"
Vous avez g\u00e9n\u00e9r\u00e9 un csv tout beau tout propre pour votre derni\u00e8re application web. Vous avez bien mis les headers en UTF-8. En t\u00e9moigne ce code PHP : header(\u00ab\u00a0Content-Type: application\/force-download; […]<\/p>\n","protected":false},"author":1,"featured_media":249,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":[],"categories":[35],"tags":[52,51,53],"_links":{"self":[{"href":"https:\/\/informatique.lamecarlate.net\/wp-json\/wp\/v2\/posts\/237"}],"collection":[{"href":"https:\/\/informatique.lamecarlate.net\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/informatique.lamecarlate.net\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/informatique.lamecarlate.net\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/informatique.lamecarlate.net\/wp-json\/wp\/v2\/comments?post=237"}],"version-history":[{"count":1,"href":"https:\/\/informatique.lamecarlate.net\/wp-json\/wp\/v2\/posts\/237\/revisions"}],"predecessor-version":[{"id":923,"href":"https:\/\/informatique.lamecarlate.net\/wp-json\/wp\/v2\/posts\/237\/revisions\/923"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/informatique.lamecarlate.net\/wp-json\/wp\/v2\/media\/249"}],"wp:attachment":[{"href":"https:\/\/informatique.lamecarlate.net\/wp-json\/wp\/v2\/media?parent=237"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/informatique.lamecarlate.net\/wp-json\/wp\/v2\/categories?post=237"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/informatique.lamecarlate.net\/wp-json\/wp\/v2\/tags?post=237"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}