Je développe une partie d'une application chargée d'exporter certaines données dans des fichiers CSV. L'application utilise toujours UTF-8 en raison de sa nature multilingue à tous les niveaux. Mais ouvrir de tels fichiers CSV (contenant par exemple des signes diacritiques, des lettres cyrilliques, des lettres grecques) dans Excel n'obtient pas les résultats attendus montrant quelque chose comme Г„/Г¤, Г–/Г¶
. Et je ne sais pas comment forcer Excel à comprendre que le fichier CSV ouvert est codé en UTF-8. J'ai également essayé de spécifier la nomenclature UTF-8 EF BB BF
, mais Excel l'ignore.
Y a-t-il une solution de contournement?
PS Quels outils peuvent potentiellement se comporter comme Excel?
MISE À JOUR
Je dois dire que j'ai confondu la communauté avec la formulation de la question. Lorsque je posais cette question, j'ai demandé un moyen d'ouvrir un fichier CSV UTF-8 dans Excel sans aucun problème pour un utilisateur, de manière fluide et transparente. Cependant, j'ai utilisé une mauvaise formulation demandant de le faire automatiquement . C'est très déroutant et cela se heurte à l'automatisation des macros VBA. Il y a deux réponses à ces questions que j'apprécie le plus: la toute première réponse d'Alex https://stackoverflow.com/a/6002338/166589 , et j'ai accepté cette réponse; et le second par Mark https://stackoverflow.com/a/6488070/166589qui sont apparus un peu plus tard. Du point de vue de la convivialité, Excel semblait manquer d'une bonne prise en charge UTF-8 CSV conviviale, donc je considère que les deux réponses sont correctes, et j'ai d'abord accepté la réponse d'Alex parce qu'elle a vraiment déclaré qu'Excel n'était pas en mesure de le faire cela de manière transparente. C'est ce que j'ai confondu avec automatiquement ici. La réponse de Mark propose un moyen plus compliqué pour les utilisateurs plus avancés d'atteindre le résultat attendu. Les deux réponses sont excellentes, mais celle d'Alex correspond un peu mieux à ma question non clairement spécifiée.
MISE À JOUR 2
Cinq mois plus tard après le dernier montage, j'ai remarqué que la réponse d'Alex avait disparu pour une raison quelconque. J'espère vraiment que ce n'était pas un problème technique et j'espère qu'il n'y a plus de discussion sur la meilleure réponse à présent. J'accepte donc la réponse de Mark comme la meilleure.
\t
comme délimiteur. Fonctionnera en anglais et non anglais Excel. Peut appuyerCtrl-S
sans sélectionner le format de fichier, etc. Préserve les caractères Unicode.Réponses:
Alex a raison, mais comme vous devez exporter vers csv, vous pouvez donner aux utilisateurs ce conseil lors de l'ouverture des fichiers csv:
De cette façon, les caractères spéciaux devraient s'afficher correctement.
la source
Le marqueur d'ordre des octets UTF-8 indiquera Excel 2007+ au fait que vous utilisez UTF-8. (Voir cet article SO ).
Dans le cas où quelqu'un a les mêmes problèmes que moi, la classe de codage UTF8 de .NET ne génère pas de marqueur d'ordre d'octets dans un
GetBytes()
appel. Vous devez utiliser des flux (ou utiliser une solution de contournement ) pour obtenir la nomenclature en sortie.la source
UTF-8
àUTF-8 with BOM
Le bogue avec la nomenclature ignorée semble être corrigé pour Excel 2013. J'ai eu le même problème avec les lettres cyrilliques, mais l'ajout de caractère BOM
\uFEFF
a aidé.la source
$utf8_with_bom = chr(239) . chr(187) . chr(191) . $csvText
:;Il est incroyable qu'il y ait autant de réponses mais aucune ne répond à la question:
La réponse marquée comme la réponse acceptée avec plus de 200 votes positifs est inutile pour moi car je ne veux pas donner à mes utilisateurs un manuel sur la façon de configurer Excel. En dehors de cela: ce manuel s'appliquera à une version d'Excel mais les autres versions d'Excel ont des menus et des boîtes de dialogue de configuration différents. Vous auriez besoin d'un manuel pour chaque version d'Excel.
La question est donc de savoir comment faire en sorte qu'Excel affiche les données UTF8 d'un simple double-clic?
Eh bien au moins dans Excel 2007, ce n'est pas possible si vous utilisez des fichiers CSV car la nomenclature UTF8 est ignorée et vous ne verrez que des ordures. Cela fait déjà partie de la question de Lyubomyr Shaydariv:
Je fais la même expérience: L'écriture de données russes ou grecques dans un fichier CSV UTF8 avec une nomenclature entraîne des ordures dans Excel:
Contenu du fichier CSV UTF8:
Résultat dans Excel 2007:
Une solution consiste à ne pas utiliser du tout CSV. Ce format est implémenté si bêtement par Microsoft qu'il dépend des paramètres de région dans le panneau de configuration si une virgule ou un point - virgule est utilisé comme séparateur. Ainsi, le même fichier CSV peut s'ouvrir correctement sur un ordinateur, mais pas sur un autre ordinateur. "CSV" signifie " Valeurs séparées par des virgules " mais par exemple sur un Windows allemand par défaut, le point-virgule doit être utilisé comme séparateur alors que la virgule ne fonctionne pas. (Ici, il doit être nommé SSV = Valeurs séparées par des points-virgules) Les fichiers CSV ne peuvent pas être échangés entre différentes versions linguistiques de Windows. Il s'agit d'un problème supplémentaire au problème UTF-8.
Excel existe depuis des décennies. Il est dommage que Microsoft n'ait pas été en mesure de mettre en œuvre une chose aussi fondamentale que l'importation CSV pendant toutes ces années.
Cependant, si vous mettez les mêmes valeurs dans un fichier HTML et enregistrez ce fichier en tant que fichier UTF8 avec BOM avec l'extension de fichier XLS, vous obtiendrez le résultat correct.
Contenu du fichier UTF8 XLS:
Résultat dans Excel 2007:
Vous pouvez même utiliser des couleurs en HTML qu'Excel affichera correctement.
Résultat dans Excel 2007:
Dans ce cas, seule la table elle-même a une bordure et des lignes noires. Si vous souhaitez que TOUTES les cellules affichent le quadrillage, cela est également possible en HTML:
Ce code permet même de spécifier le nom de la feuille de calcul (ici "MySuperSheet")
Résultat dans Excel 2007:
la source
Nous avons utilisé cette solution de contournement:
la source
Eu les mêmes problèmes avec les fichiers CSV générés par PHP. Excel a ignoré la nomenclature lorsque le séparateur a été défini via
"sep=,\n"
au début du contenu (mais bien sûr après la nomenclature).Donc, ajouter une BOM (
"\xEF\xBB\xBF"
) au début du contenu et définir le point-virgule comme séparateur viafputcsv($fh, $data_array, ";");
fait l'affaire.la source
J'ai eu le même problème dans le passé (comment produire des fichiers qu'Excel peut lire et d'autres outils peuvent également lire). J'utilisais TSV plutôt que CSV, mais le même problème avec les encodages est survenu.
Je n'ai pas trouvé de moyen pour qu'Excel reconnaisse automatiquement UTF-8, et je n'étais pas disposé / capable d'infliger aux consommateurs des fichiers des instructions compliquées pour les ouvrir. Je les ai donc encodés en UTF-16le (avec une nomenclature) au lieu d'UTF-8. Deux fois la taille, mais Excel peut reconnaître l'encodage. Et ils se compriment bien, donc la taille importe rarement (mais malheureusement jamais).
la source
Vieille question mais bon sang, la solution la plus simple est:
la source
Comme je l'ai publié sur http://thinkinginsoftware.blogspot.com/2017/12/correctly-generate-csv-that-excel-can.html :
Dites au développeur du logiciel en charge de générer le CSV de le corriger. Pour contourner le problème, vous pouvez utiliser gsed pour insérer la nomenclature UTF-8 au début de la chaîne:
Cette commande insère la nomenclature UTF-4 si elle n'est pas présente. C'est donc une commande idempotente. Vous devriez maintenant pouvoir double-cliquer sur le fichier et l'ouvrir dans Excel.
la source
Vous pouvez convertir un fichier .csv en UTF-8 avec BOM via Notepad ++:
Encoding
→Convert to UTF-8
.File
→Save
.Fonctionné dans Microsoft Excel 2013 (15.0.5093.1000) MSO (15.0.5101.1000) 64 bits de Microsoft Office Professionnel Plus 2013 sur Windows 8.1 avec paramètres régionaux pour les programmes non Unicode définis sur «Allemand (Allemagne)».
la source
Macro vba simple pour ouvrir des fichiers texte et csv utf-8
Origine: = 65001 est UTF-8. Virgule: vraie pour les fichiers .csv distribués dans des colonnes
Enregistrez-le dans Personal.xlsb pour qu'il soit toujours disponible. Personnalisez la barre d'outils Excel en ajoutant un bouton d'appel de macro et ouvrez des fichiers à partir de là. Vous pouvez ajouter plus de formatage à la macro, comme l'ajustement automatique des colonnes, l'alignement, etc.
la source
Juste pour aider les utilisateurs intéressés à ouvrir le fichier sur Excel qui réalisent ce fil comme moi.
J'ai utilisé l'assistant ci-dessous et cela a bien fonctionné pour moi, en important un fichier UTF-8. Pas transparent, mais utile si vous avez déjà le fichier.
Source: https://www.itg.ias.edu/content/how-import-csv-file-uses-utf-8-character-encoding-0
la source
Oui, c'est possible. Comme indiqué précédemment par plusieurs utilisateurs, il semble y avoir un problème avec Excel qui lit le bon ordre de byte lorsque le fichier est encodé en UTF-8. Avec UTF-16, il ne semble pas avoir de problème, il est donc endémique à UTF-8. La solution que j'utilise pour cela est d'ajouter la nomenclature, deux fois. Pour cela, j'exécute la commande sed suivante deux fois:
, où le caractère générique peut être remplacé par n'importe quel nom de fichier. Cependant, cela conduit à une mutation du sep = au début du fichier .csv. Le fichier .csv s'ouvrira alors normalement dans Excel, mais avec une ligne supplémentaire avec "sep =" dans la première cellule. Le "sep =" peut également être supprimé dans le .csv source lui-même, mais lors de l'ouverture du fichier avec VBA, le délimiteur doit être spécifié:
Le format 6 est le format .csv. Définissez Local sur true, au cas où il y aurait des dates dans le fichier. Si Local n'est pas défini sur true, les dates seront américanisées, ce qui dans certains cas corrompra le format .csv.
la source
Voici ma solution de travail:
La clé est Origine: = 65001
la source
Oui c'est possible. Lors de l'écriture du flux créant le csv, la première chose à faire est la suivante:
la source
Une liste de réponses vraiment étonnante, mais comme il en manque une assez bonne, je vais la mentionner ici: ouvrez le fichier csv avec des feuilles de google et enregistrez-le sur votre ordinateur local en tant que fichier excel.
Contrairement à Microsoft, Google a réussi à prendre en charge les fichiers csv UTF-8, il fonctionne donc simplement pour y ouvrir le fichier. Et l'exportation au format Excel fonctionne également. Donc, même si ce n'est pas la solution préférée pour tous, c'est assez sûr et le nombre de clics n'est pas aussi élevé que cela puisse paraître, surtout lorsque vous êtes déjà connecté à Google de toute façon.
la source
Cela ne répond pas exactement à la question, mais comme je suis tombé sur ce problème et que les solutions ci-dessus ne fonctionnaient pas pour moi ou avaient des exigences que je ne pouvais pas satisfaire, voici une autre façon d'ajouter la nomenclature lorsque vous avez accès à vim:
la source
salut j'utilise ruby sur rails pour la génération csv. Dans notre application, nous prévoyons d'opter pour le multi-langue (I18n) et nous avons rencontré un problème lors de l'affichage du contenu I18n dans le fichier CSV de Windows Excel.
Était bien avec Linux (Ubuntu) et mac.
Nous avons identifié que Windows Excel doit à nouveau importer les données pour afficher les données réelles. Pendant l'importation, nous aurons plus d'options pour choisir le jeu de caractères.
Mais cela ne peut pas être éduqué pour chaque utilisateur, donc la solution que nous recherchons est d'ouvrir simplement en double-cliquant.
Ensuite, nous avons identifié la façon d'afficher les données par mode ouvert et bom dans windows excel à l'aide de aghuddleston gist . Ajouté à la référence.
Exemple de contenu I18n
Sous Mac et Linux
Suédois: Förnamn Anglais: Prénom
Sous Windows
Suédois: Förnamn Anglais: Prénom
Les choses importantes à noter ici sont le mode ouvert et bom
open_mode = "w +: UTF-16LE: UTF-8"
bom = "\ xEF \ xBB \ xBF"
Avant d'écrire la nomenclature CSV insert
f. écrire bom
f.write (csv_file)
Windows et Mac
Le fichier peut être ouvert directement en double-cliquant.
Linux (ubuntu)
Lors de l'ouverture d'un fichier, demandez les options de séparation -> choisissez «TAB»
la source
J'ai rencontré le même problème il y a quelques jours et je n'ai trouvé aucune solution car je ne peux pas utiliser la
import from csv
fonctionnalité car elle permet de tout styliser sous forme de chaîne.Ma solution a d'abord été d'ouvrir le fichier avec notpad ++ et
change the encode to ASCII
. Il suffit ensuite d'ouvrir le fichier dans Excel et cela a fonctionné comme prévu.la source
En php, vous ajoutez simplement $ bom à votre $ csv_string:
Testé avec MS Excel 2016, php 7.2.4
la source
C'est une vieille question mais je viens de rencontrer un problème similaire et la solution peut aider les autres:
Nous avons eu le même problème lors de l'écriture de données texte CSV dans un fichier, puis en ouvrant le fichier .csv résultant dans Excel déplace tout le texte dans une seule colonne. Après avoir lu les réponses ci-dessus, j'ai essayé ce qui suit, ce qui semble résoudre le problème.
Appliquez un encodage UTF-8 lorsque vous créez votre StreamWriter. C'est ça.
Exemple:
la source
Close()
dans laDispose
pile mais nous y voilà . Vous avez également tort de dire que l'importation CSV est primitive, car elle n'a pas besoin de l'approche HTML inefficace que vous avez suggérée. En fait, créer des étapes de programmation supplémentaires pour prendre des données en texte brut, les transformer en HTML puis les extraire dans Excel semble contre-intuitifSi vous souhaitez le rendre entièrement automatique, en un seul clic, ou pour le charger automatiquement dans Excel, par exemple une page Web, mais ne pouvez pas générer de fichiers Excel appropriés, je vous suggère de regarder le format SYLK comme alternative. OK, ce n'est pas aussi simple que CSV mais il est basé sur du texte et très facile à implémenter et il prend en charge UTF-8 sans aucun problème.
J'ai écrit une classe PHP qui reçoit les données et génère un fichier SYLK qui s'ouvrira directement dans Excel en cliquant simplement sur le fichier (ou lancera automatiquement Excel si vous écrivez le fichier sur une page Web avec le type MIME correct. Vous pouvez même ajoutez la mise en forme (comme le gras, formatez les nombres de manière particulière, etc.) et changez la taille des colonnes, ou la taille automatique des colonnes au texte dans les colonnes et dans l'ensemble, le code ne dépasse probablement pas environ 100 lignes.
Il est très facile de désosser SYLK en créant une simple feuille de calcul et en l'enregistrant en tant que SYLK, puis en la lisant avec un éditeur de texte. Le premier bloc sont des en-têtes et des formats numériques standard que vous reconnaîtrez (que vous régurgitez simplement dans chaque fichier que vous créez), puis les données sont simplement une coordonnée X / Y et une valeur.
la source
la source
Je génère des fichiers csv à partir d'une simple application C # et j'ai eu le même problème. Ma solution était de m'assurer que le fichier est écrit avec l'encodage UTF8, comme ceci:
J'avais à l'origine le code suivant, avec lequel les accents semblent bien dans Notepad ++, mais se déformaient dans Excel:
Votre kilométrage peut varier - j'utilise .NET 4 et Excel à partir d'Office 365.
la source
Solution de travail pour Office 365
UTF-16
(pas LE, BE)\t
Code en PHP
la source
Enregistrez d'abord la feuille de calcul Excel au format Unicode. Ouvrez le fichier TXT à l'aide d'Internet Explorer et cliquez sur "Enregistrer sous" Encodage TXT - choisissez l'encodage approprié, c'est-à-dire pour Win Cyrillic 1251
la source
J'ai essayé tout ce que je pouvais trouver sur ce fil et similaire, rien ne fonctionnait pleinement. Cependant, l'importation dans des feuilles Google et le téléchargement simple au format csv ont fonctionné comme un charme. Essayez-le si vous venez à mon point de frustration.
la source