J'ai ce truc très simple qui sort juste des trucs au format CSV, mais ça doit être UTF-8. J'ouvre ce fichier dans TextEdit ou TextMate ou Dreamweaver et il affiche correctement les caractères UTF-8, mais si je l'ouvre dans Excel, c'est ce genre de chose stupide à la place. Voici ce que j'ai en tête de mon document:
header("content-type:application/csv;charset=UTF-8");
header("Content-Disposition:attachment;filename=\"CHS.csv\"");
Tout cela semble avoir l'effet souhaité, sauf qu'Excel (Mac, 2008) ne veut pas l'importer correctement. Il n'y a pas d'options dans Excel pour que je puisse "ouvrir en UTF-8" ou quoi que ce soit, alors ... Je suis un peu ennuyé.
Je n'arrive pas à trouver de solutions claires à ce problème, même si beaucoup de gens ont le même problème. La chose que je vois le plus est d'inclure la nomenclature, mais je ne sais pas exactement comment faire cela. Comme vous pouvez le voir ci-dessus, je viens d' echo
ingérer ces données, je n'écris aucun fichier. Je peux le faire si j'en ai besoin, je ne le suis tout simplement pas parce que cela ne semble pas nécessaire à ce stade. De l'aide?
Mise à jour: j'ai essayé de faire écho à la nomenclature que echo pack("CCC", 0xef, 0xbb, 0xbf);
je viens de retirer d'un site qui essayait de détecter la nomenclature. Mais Excel ajoute simplement ces trois caractères à la toute première cellule lors de l'importation et gâche toujours les caractères spéciaux.
la source
Réponses:
Pour citer un ingénieur du support Microsoft ,
Mise à jour, 2017 : Ceci est vrai pour toutes les versions de Microsoft Excel pour Mac avant Office 2016 . Les versions plus récentes (à partir d'Office 365) prennent désormais en charge UTF-8.
Afin de produire du contenu UTF-8 qu'Excel à la fois sous Windows et OS X pourra lire avec succès, vous devrez faire deux choses:
Assurez-vous de convertir votre texte CSV UTF-8 en UTF-16LE
Assurez-vous que vous ajoutez la marque d'ordre d'octet UTF-16LE au début du fichier
Le problème suivant qui apparaît uniquement avec Excel sous OS X (mais pas Windows) sera lors de l'affichage d'un fichier CSV avec des valeurs séparées par des virgules, Excel ne rendra les lignes qu'avec une ligne et tout le texte avec les virgules dans la première ligne.
Le moyen d'éviter cela est d'utiliser des tabulations comme valeur séparée.
J'ai utilisé cette fonction à partir des commentaires PHP (en utilisant les onglets "\ t" au lieu des virgules) et cela fonctionnait parfaitement sur OS X et Windows Excel.
Notez que pour résoudre un problème avec une colonne vide à la fin d'une ligne, j'ai dû changer la ligne de code qui dit:
à
Comme le disent certains des autres commentaires sur cette page, d'autres applications de feuille de calcul comme OpenOffice Calc, les propres chiffres d'Apple et la feuille de calcul de Google Doc n'ont aucun problème avec les fichiers UTF-8 avec des virgules.
Consultez le tableau de cette question pour savoir ce qui fonctionne et ne fonctionne pas pour les fichiers CSV Unicode dans Excel
En passant, je pourrais ajouter que si vous utilisez Composer , vous devriez jeter un œil à l'ajout
League\Csv
de vos besoins.League\Csv
a une très belle API pour créer des fichiers CSV .Pour utiliser
League\Csv
cette méthode de création de fichiers CSV, consultez cet exemplela source
sep=;
ousep=,
au fichier CSV indique à Excel comment le CSV est séparé et les colonnes seront créées correctement à nouveau."sep=,\n"
autre ligne, ajoutais les données. Les choses allaient bien si je faisais tout en une seule ligne ($csv = chr(255) . chr(254) /* BOM */ . "sep=,\n" . mb_convert_encoding($csv, 'UTF-16LE', 'UTF-8');
). Tout va bien maintenant sur Mac. Je n'ai pas Windows pour tester.J'ai le même problème (ou similaire).
Dans mon cas, si j'ajoute une nomenclature à la sortie, cela fonctionne:
Je pense que c'est un hack assez laid, mais cela a fonctionné pour moi, au moins pour Excel 2007 Windows. Je ne suis pas sûr que cela fonctionnera sur Mac.
la source
Voici comment je l'ai fait (c'est pour inviter le navigateur à télécharger le fichier csv):
La seule chose qui a résolu le problème d'encodage UTF8 dans l'aperçu CSV lorsque vous appuyez sur la barre d'espace sur Mac ... mais pas dans Excel Mac 2008 ... je ne sais pas pourquoi
la source
$outstream = fopen( "php://output", 'w' ); fputs( $outstream, "\xEF\xBB\xBF" ); foreach ( $export as $fields ) { fputcsv( $outstream, $fields ); } fclose( $outstream );
))
.Je viens de traiter le même problème et j'ai trouvé deux solutions.
Utilisez la classe PHPExcel comme suggéré par bpeterson76 .
Voici une méthode PHP qui prendra certaines données TSV et produira un fichier Excel dans le navigateur, notez qu'elle utilise Excel5 Writer, ce qui signifie que le fichier doit être compatible avec les anciennes versions d'Excel, mais je n'ai plus accès à aucune, donc je ne peux pas les tester.
En raison des problèmes d'efficacité avec PHPExcel, j'ai également dû trouver comment générer un fichier CSV ou TSV compatible UTF-8 et Excel.
Voici le code PHP que j'ai utilisé, notez que j'utilise des données tsv (tabulations comme délimiteurs au lieu de virgules):
la source
J'avais le même problème et il a été résolu comme ci-dessous:
la source
Excel ne prend pas en charge UTF-8. Vous devez encoder votre texte UTF-8 dans UCS-2LE.
la source
Dans mon cas, la suite fonctionne très bien pour créer un fichier CSV avec des caractères UTF-8 correctement affichés dans Excel.
L'en-
0xEF 0xBB 0xBF
tête de nomenclature indiquera à Excel le codage correct.la source
fprintf($out, chr(0xEF).chr(0xBB).chr(0xBF));
<- c'est exactement ce dont j'avais besoin. Il fonctionne comme un charme.Pour faire le suivi:
Il semble que le problème vient simplement d'Excel sur Mac. Ce n'est pas comme ça que je génère les fichiers, car même générer des CSV à partir d'Excel les brise. J'enregistre au format CSV, et je réimporte, et tous les personnages sont foirés.
Donc… il ne semble pas y avoir de réponse correcte à cela. Merci pour toutes les suggestions.
Je dirais que d'après tout ce que j'ai lu, la suggestion de @Daniel Magliola concernant la nomenclature serait probablement la meilleure réponse pour un autre ordinateur. Mais cela ne résout toujours pas mon problème.
la source
Cela fonctionne très bien dans Excel pour Windows et Mac OS.
Correction des problèmes dans Excel qui n'affichaient pas les caractères contenant des signes diacritiques, des lettres cyrilliques, des lettres grecques et des symboles monétaires.
la source
Le fichier CSV doit inclure une marque d'ordre d'octet.
Ou comme suggéré et solution de contournement, faites-en écho avec le corps HTTP
la source
Ajouter:
Ou:
Avant d'écrire un contenu dans un fichier CSV.
Exemple:
la source
Étant donné que l'encodage UTF8 ne fonctionne pas bien avec Excel. Vous pouvez convertir les données en un autre type d'encodage à l'aide de
iconv()
.par exemple
la source
Il
mb_convert_encoding
n'est pas nécessaire de convertir du texte déjà encodé en utf-8 à l'aide de . Ajoutez simplement trois caractères devant le contenu original:Pour moi, cela a résolu le problème des caractères spéciaux dans les fichiers csv.
la source
fputs
.En enquêtant et en trouvant que UTF-8 ne fonctionne pas bien sur MAC et Windows, j'ai donc essayé avec Windows-1252, il prend bien en charge les deux mais vous devez sélectionner le type d'encodage sur ubuntu. Voici mon code
$valueToWrite = mb_convert_encoding($value, 'Windows-1252');
la source
la source
Que diriez-vous simplement de sortir pour Excel lui-même? C'est une excellente classe qui vous permet de générer des fichiers XLS côté serveur. Je l'utilise fréquemment pour les clients qui ne peuvent pas "comprendre" les csv et qui n'ont jusqu'à présent jamais eu de plainte. Il permet également un formatage supplémentaire (ombrage, hauteur de ligne, calculs, etc.) que csv ne fera jamais.
la source
vous pouvez convertir votre chaîne CSV avec iconv . par exemple:
la source
Vous devez utiliser l'encodage "Windows-1252".
Vous devez peut-être convertir vos chaînes:
la source
Vous pouvez ajouter les 3 octets au fichier avant d'exporter, cela fonctionne pour moi. Avant de faire ce système ne fonctionne que sous Windows et HP -UX mais a échoué sous Linux.
Avoir une nomenclature UTF-8 (3 octets, hex EF BB BF) au début du fichier. Sinon, Excel interprétera les données selon le codage par défaut de vos paramètres régionaux (par exemple, cp1252) au lieu de utf-8
Générer un fichier CSV pour Excel, comment avoir une nouvelle ligne dans une valeur
la source
Je suis sur Mac, dans mon cas, je devais juste spécifier le séparateur avec
"sep=;\n"
et encoder le fichier en UTF-16LE comme ceci:la source
Pour moi, aucune des solutions ci-dessus n'a fonctionné. Voici ce que j'ai fait pour résoudre le problème: modifiez la valeur à l'aide de cette fonction dans le code PHP:
Cette valeur de sortie correctement dans une feuille Excel.
la source
J'ai eu ce même problème lorsque j'avais une routine Excel VBA qui importait des données. Étant donné que CSV est un format de texte brut, je travaillais à ce problème en ouvrant par programme les données dans un simple éditeur de fichiers comme wordpad, et en les réenregistrant en tant que texte Unicode, ou en les copiant dans le presse-papiers à partir de là et en les collant dans Excel. Si Excel n'analyse pas automatiquement le CSV en cellules, cela est facilement résolu en utilisant la fonction intégrée "Texte en colonnes".
la source
Le problème se produit-il toujours lorsque vous l'enregistrez en tant que fichier .txt et que vous l'ouvrez dans Excel avec une virgule comme délimiteur?
Le problème n'est peut-être pas du tout l'encodage, il se peut simplement que le fichier ne soit pas un CSV parfait selon les normes Excel.
la source
Ce message est assez ancien, mais après des heures d'essais, je veux partager ma solution… peut-être que cela aide quelqu'un qui a affaire à Excel, Mac et CSV et à trébucher sur cette menace. Je génère un csv dynamiquement en tant que sortie d'une base de données avec les utilisateurs Excel à l'esprit. (UTF-8 avec BOM)
J'ai essayé beaucoup d'iconv mais je n'ai pas pu faire fonctionner les trémas allemands sous Mac Excel 2004. Une solution: PHPExcel. C'est super mais pour mon projet un peu trop. Ce qui fonctionne pour moi, c'est de créer le fichier csv et de convertir ce fichier csv en xls avec ce PHPsnippet: csv2xls . le résultat xls fonctionne avec des trémas allemands excellents (ä, ö, Ü, ...).
la source
Je viens d'essayer ces en-têtes et j'ai Excel 2013 sur un PC Windows 7 pour importer correctement le fichier CSV avec des caractères spéciaux. La marque d'ordre d'octet (BOM) était la clé finale qui l'a fait fonctionner.
la source
Sinon, vous pouvez:
la source
Solution FACILE pour Mac Excel 2008: J'ai eu du mal avec cela tellement de fois, mais voici ma solution simple: ouvrez le fichier .csv dans Textwrangler qui devrait ouvrir correctement vos caractères UTF-8. Maintenant, dans la barre d'état inférieure, changez le format de fichier de "Unicode (UTF-8)" à "Western (ISO Latin 1)" et enregistrez le fichier. Maintenant, allez sur votre Mac Excel 2008 et sélectionnez Fichier> Importer> Sélectionnez csv> Trouvez votre fichier> dans Origine du fichier, sélectionnez "Windows (ANSI)" et voilà, les caractères UTF-8 s'affichent correctement. Au moins ça le fait pour moi ...
la source
J'utilise ça et ça marche
la source
#output un CSV UTF-8 en PHP qu'Excel lira correctement.
la source
la source