J'exporte des données par programmation (en utilisant PHP 5.2) dans un fichier de test .csv.
Exemple de données: Numéro 1
(notez le e accentué). Les données sont utf-8
(pas de nomenclature ajoutée).
Lorsque j'ouvre ce fichier dans MS Excel s'affiche sous la forme Numéro 1
.
Je suis en mesure de l'ouvrir dans un éditeur de texte (UltraEdit) qui l'affiche correctement. UE rapporte que le personnage est decimal 233
.
Comment puis-je exporter des données texte dans un fichier .csv afin que MS Excel les rende correctement , de préférence sans forcer l'utilisation de l'assistant d'importation ou des paramètres de l'assistant non par défaut?
excel
encoding
csv
diacritics
Freddo411
la source
la source
Réponses:
Un fichier UTF8 correctement formaté peut avoir une marque d'ordre d'octet comme ses trois premiers octets. Ce sont les valeurs hexadécimales 0xEF, 0xBB, 0xBF. Ces octets servent à marquer le fichier comme UTF8 (car ils ne sont pas pertinents en tant qu'informations "ordre des octets"). 1 Si cette nomenclature n'existe pas, le consommateur / lecteur doit déduire le type de codage du texte. Les lecteurs qui ne sont pas compatibles UTF8 liront les octets comme un autre encodage tel que Windows-1252 et afficheront les caractères

au début du fichier.Il existe un bogue connu où Excel, lors de l'ouverture des fichiers CSV UTF8 via l'association de fichiers, suppose qu'ils sont dans un codage à un octet, sans tenir compte de la présence de la nomenclature UTF8. Cela ne peut être résolu par aucune page de code ou paramètre de langue par défaut du système. La nomenclature ne sera pas indiquée dans Excel - cela ne fonctionnera tout simplement pas. (Un rapport minoritaire affirme que la nomenclature déclenche parfois l'assistant "Importer du texte".) Ce bogue semble exister dans Excel 2003 et les versions antérieures. La plupart des rapports (parmi les réponses ici) indiquent que cela est corrigé dans Excel 2007 et plus récent.
Notez que vous pouvez toujours * ouvrir correctement les fichiers CSV UTF8 dans Excel en utilisant l'assistant "Importer du texte", qui vous permet de spécifier le codage du fichier que vous ouvrez. Bien sûr, c'est beaucoup moins pratique.
Les lecteurs de cette réponse sont très probablement dans une situation où ils ne prennent pas particulièrement en charge Excel <2007, mais envoient du texte UTF8 brut à Excel, ce qui l'interprète mal et saupoudre votre texte avec d'
Ã
autres caractères Windows-1252 similaires. L'ajout de la nomenclature UTF8 est probablement votre solution la meilleure et la plus rapide.Si vous êtes coincé avec des utilisateurs sur des Excels plus anciens et qu'Excel est le seul consommateur de vos CSV, vous pouvez contourner ce problème en exportant UTF16 au lieu d'UTF8. Excel 2000 et 2003 les ouvriront deux fois correctement. (Certains autres éditeurs de texte peuvent avoir des problèmes avec UTF16, vous devrez donc peut-être peser soigneusement vos options.)
* Sauf lorsque vous ne pouvez pas, (au moins) l'assistant d'importation d'Excel 2011 pour Mac ne fonctionne pas toujours avec tous les encodages, indépendamment de ce que vous lui dites. </anecdotal-evidence> :)
la source

de la première cellule; ou tout autre chose.
). Cela aide uniquement à deviner les algorithmes et les formats de fichiers qui en tiennent spécifiquement compte (par exemple XML). L'inconvénient d'inclure une fausse-BOM dans les fichiers UTF-8 est que vous cassez leur compatibilité ASCII (un argument de vente majeur pour UTF-8) De nombreux outils de texte ignorant l'encodage vont casser face à une fausse-BOM inattendue.La préparation d'une nomenclature (\ uFEFF) a fonctionné pour moi (Excel 2007), dans la mesure où Excel a reconnu le fichier comme UTF-8. Sinon, l'enregistrer et utiliser l'assistant d'importation fonctionne, mais est moins idéal.
la source
\ufeff
une nomenclature UTF-16 (BE) n'est-elle pas une nomenclature UTF-8Voici le code PHP que j'utilise dans mon projet lors de l'envoi de Microsoft Excel à l'utilisateur:
MISE À JOUR: Amélioration du nom de fichier et BUG corrige le calcul de la longueur correcte. Merci à TRiG et @ ivanhoe011
la source
'Content-Disposition: attachment; filename="'.$filename.'.csv"'
parce que Firefox veut les guillemets, sinon il coupera votre nom de fichier après un espace.text/csv
) mais l'appelez-vous Excel (application/vnd.ms-excel
)?header('Content-Length: '. mb_strlen($encoded_csv, 'UTF-16LE'));
?La réponse pour toutes les combinaisons de versions d'Excel (2003 + 2007) et de types de fichiers
La plupart des autres réponses ici concernent uniquement leur version Excel et ne vous aideront pas nécessairement, car leur réponse pourrait ne pas être vraie pour votre version d'Excel.
Par exemple, l'ajout du caractère de nomenclature pose des problèmes avec la reconnaissance automatique du séparateur de colonne, mais pas avec toutes les versions d'Excel.
Il existe 3 variables qui déterminent si cela fonctionne dans la plupart des versions d'Excel:
Quelqu'un de stoïque chez SAP a essayé toutes les combinaisons et a rapporté le résultat. Résultat final? Utilisez UTF16le avec la nomenclature et le caractère de tabulation comme séparateur pour qu'il fonctionne dans la plupart des versions d'Excel.
Tu ne me crois pas? Je ne le ferais pas non plus, mais lisez ici et pleurez: http://wiki.sdn.sap.com/wiki/display/ABAP/CSV+tests+of+encoding+and+column+separator
la source
sep=,
ou tout ce que vous voulez utiliser? Si vous ajoutez déjà la nomenclature, je suppose que vous n'êtes pas opposé à l'ajout d'éléments au fichier.sélectionnez UTF-8 enconding lors de l'importation. si vous utilisez Office 2007, c'est ici que vous l'avez choisi: juste après avoir ouvert le fichier.
la source
Faites écho à la nomenclature UTF-8 avant de sortir les données CSV. Cela résout tous les problèmes de caractères dans Windows mais ne fonctionne pas pour Mac.
Cela fonctionne pour moi car je dois générer un fichier qui ne sera utilisé que sur les PC Windows.
la source
UTF-8 ne fonctionne pas pour moi dans Office 2007 sans aucun service pack, avec ou sans BOM (U + ffef ou 0xEF, 0xBB, 0xBF, ni l'un ni l'autre) l'installation de sp3 fait fonctionner UTF-8 lorsque 0xEF, 0xBB, 0xBF BOM est ajouté.
UTF-16 fonctionne lors de l'encodage en python en utilisant "utf-16-le" avec un 0xff 0xef BOM en préfixe, et en utilisant tab comme séparateur. J'ai dû écrire manuellement la nomenclature, puis utiliser "utf-16-le" plutôt que "utf-16", sinon chaque encode () ajoutait la nomenclature à chaque ligne écrite qui apparaissait comme des ordures sur la première colonne du deuxième ligne et après.
Je ne peux pas dire si UTF-16 fonctionnerait sans aucun sp installé, car je ne peux pas revenir en arrière maintenant. soupir
C'est sur Windows, je ne sais pas sur Office pour MAC.
pour les deux cas de travail, l'importation fonctionne lors du lancement d'un téléchargement directement depuis le navigateur et l'assistant d'importation de texte n'intervient pas, il fonctionne comme prévu.
la source
Comme Fregal l'a dit, \ uFEFF est la voie à suivre.
la source
J'ai également remarqué que la question avait été «répondue» il y a quelque temps, mais je ne comprends pas les histoires qui disent que vous ne pouvez pas ouvrir un fichier csv encodé en utf8 avec succès dans Excel sans utiliser l'assistant de texte.
Mon expérience reproductible: tapez
Old MacDonald had a farm,ÈÌÉÍØ
dans le Bloc-notes, appuyez sur Entrée, puis sur Enregistrer sous (en utilisant l'option UTF-8).Utiliser Python pour montrer ce qu'il y a réellement là-dedans:
Bien. Le bloc-notes a mis une nomenclature à l'avant.
Maintenant, allez dans l'Explorateur Windows, double-cliquez sur le nom du fichier, ou faites un clic droit et utilisez "Ouvrir avec ...", et affiche Excel (2003) avec l'affichage comme prévu.
la source
open('oldmac.csv', 'rb').read()
pour vérifier votre entrée?Vous pouvez enregistrer un fichier html avec l'extension «xls» et les accents fonctionneront (avant 2007 au moins).
Exemple: enregistrez ceci (en utilisant Enregistrer sous utf8 dans le Bloc-notes) sous le nom test.xls:
la source
border="1"
à la table, vous faites obtenir des lignes, mais seulement autour des 4 cellules :)C'est juste une question de codage de caractères. Il semble que vous exportiez vos données au format UTF-8: é en UTF-8 est la séquence de deux octets 0xC3 0xA9, qui, lorsqu'elle est interprétée dans Windows-1252, est à ©. Lorsque vous importez vos données dans Excel, assurez-vous de lui indiquer que le codage de caractères que vous utilisez est UTF-8.
la source
Le format CSV est implémenté en ASCII, et non en unicode, dans Excel, ce qui modifie les signes diacritiques. Nous avons rencontré le même problème, c'est la façon dont j'ai découvert que la norme CSV officielle était définie comme étant basée sur ASCII dans Excel.
la source
Excel 2007 lit correctement UTF-8 avec csv codé BOM (EF BB BF).
Excel 2003 (et peut-être plus tôt) lit UTF-16LE avec BOM (FF FE), mais avec des tabulations au lieu de virgules ou de points-virgules.
la source
Je ne peux que CSV pour analyser correctement dans Excel 2007 en tant que petit boutiste UTF-16 séparé par des tabulations en commençant par la marque d'ordre d'octet appropriée.
la source
L'écriture d'une nomenclature dans le fichier CSV de sortie a en fait fonctionné pour moi dans Django:
Pour plus d'informations http://crashcoursing.blogspot.com/2011/05/exporting-csv-with-special-characters.html Merci les gars!
la source
printWriter.print('\ufeff')
, voir aussi Comment ajouter une nomenclature UTF-8 en java .Une autre solution que j'ai trouvée était simplement d'encoder le résultat en tant que page de code Windows 1252 (Windows-1252 ou CP1252). Cela serait fait, par exemple en définissant de
Content-Type
manière appropriée quelque chose commetext/csv; charset=Windows-1252
et en définissant le codage de caractères du flux de réponse de la même manière.la source
Notez que l'inclusion de la nomenclature UTF-8 n'est pas forcément une bonne idée - les versions Mac d'Excel l'ignorent et afficheront en fait la nomenclature au format ASCII… trois mauvais caractères au début du premier champ de votre feuille de calcul…
la source
'\uFEFF' + myCsvString
fonctionne comme prévu sur Mac Excel 15.19.1 (2016).Vérifiez l'encodage dans lequel vous générez le fichier, pour que Excel affiche correctement le fichier, vous devez utiliser la page de codes par défaut du système.
Quelle langue utilisez-vous? s'il s'agit de .Net, il vous suffit d'utiliser Encoding.Default lors de la génération du fichier.
la source
Si vous avez du code hérité dans vb.net comme moi, le code suivant a fonctionné pour moi:
la source
J'ai trouvé un moyen de résoudre le problème. C'est un mauvais hack mais cela fonctionne: ouvrez le document avec Open Office , puis enregistrez-le dans n'importe quel format Excel; le résultat
.xls
ou.xlsx
affichera les caractères accentués.la source
Avec Ruby 1.8.7, j'encode chaque champ en UTF-16 et je supprime la nomenclature (peut-être).
Le code suivant est extrait de active_scaffold_export:
La ligne importante est:
la source
ouvrir le fichier csv avec notepad ++ cliquer sur Encode, sélectionner convertir en UTF-8 (ne pas convertir en UTF-8 (sans BOM)) Enregistrer ouvert par double clic avec excel En espérant que cela aide Christophe GRISON
la source