Excel en CSV avec encodage UTF8 [fermé]


607

J'ai un fichier Excel qui contient des caractères espagnols (tildes, etc.) que je dois convertir en fichier CSV pour utiliser comme fichier d'importation. Cependant, lorsque j'enregistre au format CSV, cela réduit les caractères espagnols "spéciaux" qui ne sont pas des caractères ASCII. Il semble également le faire avec les guillemets gauche et droit et les longs tirets qui semblent provenir de l'utilisateur d'origine créant le fichier Excel sur Mac.

Étant donné que CSV n'est qu'un fichier texte, je suis sûr qu'il peut gérer un encodage UTF8, donc je suppose que c'est une limitation Excel, mais je cherche un moyen de passer d'Excel à CSV et de conserver les caractères non ASCII intact.


15
J'ai vu cette question avant de poster, mais il s'agit déjà d'avoir un CSV UTF8 et de l'ouvrir dans Excel et non l'inverse.
Jeff Treuting

7
Les réponses ci-dessous semblent fonctionner, mais ce ne sont que des solutions de contournement. Est-ce que quelqu'un sait comment faire Excel pour cela?
NielW

2
Je voulais laisser tomber mes 2 cents: après beaucoup d'essais et d'erreurs, des tentatives d'utilisation des fonctions VBA, etc ... (j'utilise Excel 97 pour diverses raisons) ... simplement en sauvegardant sous "CSV (MSDOS) "Le format a résolu ce problème pour moi. Dans mon cas, les données CSV du webinaire Citrix (GotoWebinar) finissent avec des caractères pour casser du code Apex de notre côté - l'enregistrement dans "CSV (MSDOS)" me résout (auparavant) le chargement de l'exportation CSV dans Notepad ++ et le coller dans un UTF- 8 fichier vierge et réenregistrement. :-P :-)
AMM

2
Il s'agit d'une limitation Excel très ennuyeuse. J'ai ouvert une demande de fonctionnalité uservoice à ce sujet: excel.uservoice.com/forums/… , n'hésitez pas à voter et à y arriver
Doron Yaacoby

7
selon Excel uservoice, Microsoft a commencé le mois dernier à travailler sur UTF-8 pour .csv excel.uservoice.com/forums/…
moloko

Réponses:


405

Une solution de contournement simple consiste à utiliser la feuille de calcul Google. Collez (valeurs uniquement si vous avez des formules complexes) ou importez la feuille puis téléchargez CSV. Je viens d'essayer quelques personnages et ça marche plutôt bien.

REMARQUE: Google Sheets a des limitations lors de l'importation. Voyez ici .

REMARQUE: faites attention aux données sensibles avec Google Sheets.

EDIT: Une autre alternative - en gros, ils utilisent des macro VB ou des compléments pour forcer la sauvegarde en UTF8. Je n'ai essayé aucune de ces solutions mais elles semblent raisonnables.


63
Peut-être que Joel Slotsky (ancien PM d'Excel) pourrait leur envoyer son article vieux de dix ans sur le minimum absolu que chaque développeur de logiciels doit absolument connaître positivement sur l'Unicode et les jeux de caractères ?
Indoloration

8
Avec le bloc-notes Windows normal (en utilisant enregistrer sous, puis en choisissant utf-8 dans l'option de codage) a fonctionné pour moi. Pour moi, c'est la meilleure approche pour moi car cela doit être fait par des utilisateurs qui n'ont pas de droits d'administrateur sur leurs machines, donc l'installation de logiciels supplémentaires n'est pas nécessaire.
Fer

9
OpenOffice JustWorks (tm) sans tracas - je pense qu'il devrait être inclus
Rbjz

9
Uhhh. J'ai juste eu un frisson dans le dos. Et si votre fichier Excel contient 200 000 lignes? Ou contient des données sensibles que vous ne souhaitez pas inclure dans un spreadsheat Excel? Utilisez Openoffice / Libreoffice si vous en avez besoin.
Seb

2
Et si la taille du fichier est grande? La feuille Goolge a une taille limite d'environ 75M si je me souviens bien. J'ai un fichier de 700M
News_is_Selection_Bias

133

J'ai trouvé que l' application de tableur d' OpenOffice , Calc, est vraiment bonne pour gérer les données CSV.

Dans la boîte de dialogue "Enregistrer sous ...", cliquez sur "Options de format" pour obtenir différents encodages pour CSV. LibreOffice fonctionne de la même manière que AFAIK.

boîte de dialogue d'enregistrement de calc


Je suis sûr que cela fonctionne, je n'arrive pas à avoir déjà OpenOffice, donc Google Docs était plus facile dans ma situation. mais merci pour la suggestion
Jeff Treuting

19
OpenOffice Calc dispose d'options plus nombreuses et meilleures lors de l'ouverture et de l'enregistrement de fichiers "CSV" (séparateurs de champs, encodage, etc.) que Google Docs et Excel. De plus, Google Docs souffre actuellement d'une limite de 400 000 cellules par feuille de calcul, ce qui n'est pas le cas pour OpenOffice Calc.
Christian Davén

3
Je peux confirmer que LibreOffice fonctionne également: il offre des options d'encodage de caractères à l'exportation qui font malheureusement défaut dans Excel.
Rupert Rawnsley

1
C'est une excellente option pour ceux qui travaillent avec des données sensibles. La suite OpenOffice peut être une installation portable pour ceux qui ont des machines verrouillées.
Nathan

119
  1. Enregistrez la feuille Excel en tant que "Texte Unicode (.txt)". La bonne nouvelle est que tous les caractères internationaux sont en UTF16 (attention, pas en UTF8). Cependant, le nouveau fichier "* .txt" est délimité par TAB, pas par virgule, et n'est donc pas un vrai CSV.

  2. (facultatif) Sauf si vous pouvez utiliser un fichier délimité par TAB pour l'importation, utilisez votre éditeur de texte préféré et remplacez les caractères TAB par des virgules ",".

  3. Importez votre fichier * .txt dans l'application cible. Assurez-vous qu'il peut accepter le format UTF16.

Si UTF-16 a été correctement implémenté avec la prise en charge des points de code non BMP, vous pouvez convertir un fichier UTF-16 en UTF-8 sans perdre d'informations. Je vous laisse le soin de trouver votre méthode préférée pour le faire.

J'utilise cette procédure pour importer des données d'Excel vers Moodle.


5
Enfin quelque chose qui a fonctionné! J'ai essayé les options Excel ci-dessus sur Excel 2013 sans succès. Je viens de passer à l'utilisation de \ t comme caractère séparé lorsque je l'ai analysé et cela a fonctionné parfaitement!
Mattias Lindberg

1
Nécessaire pour exporter un XLS en CSV pour l'importer dans MySQL. À l'aide d'Excel 2003, j'ai exporté au format "Unicode Text (.txt)", puis utilisé Notepad ++ pour remplacer le TAB avec ;, puis importé le fichier txt dans phpmyadmin avec par défaut "Jeu de caractères du fichier: utf-8", Format "CSV en utilisant LOAD DATA ". Tout l'encodage a été transféré correctement.
Kai Noack

3
Je vous remercie. C'est logique. Pourquoi MS refuse toujours d'utiliser UTF comme standard me bat.
Oskar Limka

4
@OskarLimka: Quand vous dites "UTF", voulez-vous dire UTF-8 ou UTF-16? Parce que Microsoft utilise un peu l'UTF-16.
Flimm

7
"La bonne nouvelle est que tous les caractères internationaux sont en UTF16 (attention, pas en UTF8)." : un non-sens complet . UTF-8 et UTF-16 sont deux façons de coder l'ensemble des points de code Unicode.

43

Je sais que c'est une vieille question, mais je suis tombé sur cette question tout en luttant avec les mêmes problèmes que le PO.

N'ayant trouvé aucune des solutions proposées une option viable, je me suis mis à découvrir s'il y avait un moyen de le faire en utilisant simplement Excel.

Heureusement, j'ai trouvé que le problème de caractère perdu ne se produit (dans mon cas) que lors de l'enregistrement du format xlsx au format csv. J'ai essayé d'enregistrer le fichier xlsx en xls d'abord, puis en csv. Cela a vraiment fonctionné.

Veuillez essayer et voir si cela fonctionne pour vous. Bonne chance.


3
Pour moi, sur Excel pour Mac 2011, cela fonctionne mais seulement si je choisis Windows comma separated (CSV). Cela ne fonctionne pas si j'utilise les options par défaut ou DOS CSV - ces deux remplacent les caractères accentués par des caractères indésirables aléatoires. Testé pour les personnages , y compris é, è, â... Je ne sais pas si c'est vrai UTF8 mais les personnages ne sont pas mutilée.
user56reinstatemonica8

12
Confirmation rapide - les fichiers produits avec cette méthode sur (Excel pour Mac 2011) ne produisent pas de csv UTF-8, MAIS , ils produisent des CSV qui contiennent au moins les caractères corrects et peuvent donc être convertis en UTF8 sans douleur dans un éditeur de texte , ce qui est un grand pas en avant par rapport à la poubelle ridicule ridicule qu'Excel crache par défaut.
user56reinstatemonica8

Oui, d'accord, cela a également fonctionné pour moi (Excel Mac 2011) et cela mérite vraiment plus de votes positifs.
cbmanica

1
Cela n'a pas vraiment fonctionné pour moi (en utilisant Excel 2007). J'avais 2 caractères non ASCII dans mon fichier et l'un d'eux a été enregistré OK de cette façon, l'autre ne l'était pas.
EM0

1
Notez que le fichier CSV résultant sera en UTF-16, pas UTF-8 comme la question posée.
Flimm

38

Vous pouvez utiliser la commande iconv sous Unix (également disponible sous Windows en tant que libiconv ).

Après avoir enregistré au format CSV sous Excel dans la ligne de commande, mettez:

iconv -f cp1250 -t utf-8 file-encoded-cp1250.csv > file-encoded-utf8.csv

(n'oubliez pas de remplacer cp1250 par votre encodage).

Fonctionne rapidement et idéalement pour les gros fichiers comme la base de données des codes postaux, qui ne peuvent pas être importés dans GoogleDocs (400 000 cellules maximum).


5
Cela est inutile si votre contenu contient des caractères qui ne peuvent pas être encodés en 1250, une meilleure façon serait d'exporter en "Unicode .txt" dans Excel et d'utiliser iconv pour convertir à partir d'Utf16. Peut-être aussi faire un sedou trpour traduire de '\ t' en ','
Sebastian

5
Le codage par défaut d'Excel semble être CP858 lors de l'enregistrement au format CSV ou MS-DOS CSV, et Windows 1252 lors de l'enregistrement au format Windows CSV (comme testé sur Excel pour Mac 2011).
claymation

4
Je suis entièrement d'accord pour dire que cela est inutile, car lorsque Excel enregistre au format .csv, il perd des informations en ce qui concerne les points de code Unicode qui ne peuvent pas être codés dans un codage à un octet par point de code.
Flimm

26

Vous pouvez le faire sur une machine Windows moderne sans logiciel tiers. Cette méthode est fiable et elle traitera les données qui incluent les virgules entre guillemets, les caractères de tabulation entre guillemets, les caractères CJK, etc.

1. Enregistrer à partir d'Excel

Dans Excel, enregistrez les données en file.txtutilisant le type Unicode Text (*.txt).

2. Démarrez PowerShell

Exécutez à powershellpartir du menu Démarrer.

3. Chargez le fichier dans PowerShell

$data = Import-Csv C:\path\to\file.txt -Delimiter "`t" -Encoding BigEndianUnicode

4. Enregistrez les données au format CSV

$data | Export-Csv file.csv -Encoding UTF8 -NoTypeInformation

2
Cette méthode fonctionnait parfaitement pour un fichier CSV avec plus de 15 000 enregistrements, avec des lignes de plus de 1024 caractères imposées par le Bloc-notes. Prend quelques secondes et n'utilise pas de logiciel tiers. Merci!
le

Ahh, même lorsque j'ai essayé d'utiliser Google Sheets, j'ai rencontré le même problème. Alors peut-être que cette stratégie PowerShell aurait fonctionné. Voilà mon problème. Pour certains personnages tels que certains emojis, vous devez utiliser CHARACTER SET utf8mb4comme décrit ici: stackoverflow.com/a/10959780/470749
Ryan

1
@Ryan Ce problème est spécifique à MySQL. J'ai juste essayé le caractère problématique dans cette question et cela a bien fonctionné dans Excel et PowerShell.
Don Cruickshank

24

La seule "manière simple" de procéder est la suivante. Tout d'abord, réalisez qu'il existe une différence entre ce qui est affiché et ce qui est caché dans le fichier Excel .csv.

  1. Ouvrez un fichier Excel où vous avez les informations (.xls, .xlsx)
  2. Dans Excel, choisissez "CSV (délimité par des virgules) (* .csv) comme type de fichier et enregistrez-le sous ce type.
  3. Dans NOTEPAD (trouvé sous "Programmes" puis Accessoires dans le menu Démarrer), ouvrez le fichier .csv enregistré dans le Bloc-notes
  4. Ensuite, choisissez -> Enregistrer sous ... et au bas de la boîte "Enregistrer sous", il y a une boîte de sélection intitulée "Encodage". Sélectionnez UTF-8 (n'utilisez PAS ANSI ou vous perdrez tous les accents, etc.). Après avoir sélectionné UTF-8, puis enregistrez le fichier sous un nom de fichier légèrement différent de l'original.

Ce fichier est en UTF-8 et conserve tous les caractères et accents et peut être importé, par exemple, dans MySQL et d'autres programmes de base de données.

Cette réponse est tirée de ce forum .


9
Ceci est incorrect, en raison de l'étape 2, l'enregistrement au format CSV. Le problème avec cela est qu'Excel enregistre le fichier CSV dans cp1252, qui est un codage d'un octet par point de code. Cela entraîne une perte d'informations pour les caractères qui ne peuvent pas tenir dans un octet.
Flimm

Cela a fonctionné pour moi, mais je ne comprends pas pourquoi. Mon fichier généré par javascript est toujours lu de manière incorrecte dans Excel (comme un encodage différent). Mais lorsque j'ouvre dans le bloc-notes et que j'enregistre en utf-8, cela fonctionne bien! Il semble donc qu'il existe une métadonnée avec l'encodage. Comment ça fonctionne? Si le bloc-notes peut enregistrer des fichiers CSV UTF-8 et Excel peut les lire, il est possible dans mon programme de générer des fichiers CSV UTF-8 corrects, qu'Excel peut lire?
felipeaf

A travaillé pour moi. Dans un XSLX converti à partir d'Access. Les formats diacritiques et LF uniquement et la date ISO sont tous OK. L'une ou l'autre n'a pas fonctionné avec des solutions plus populaires.
RolfBly

21

Un autre que j'ai trouvé utile: " Numbers " permet des paramètres d'encodage lors de l'enregistrement au format CSV.


8
^ c'est une application sous Mac OSX
Sruit A.Suk

soyez également prudent avec les nombres car le nombre de lignes est limité, et j'ai converti des données comme celle-ci avant de ne pas réaliser qu'il en avait recadré une partie. Excel / CSV a des limites beaucoup plus élevées.
MrE

14

"nevets1219" a raison sur Google docs, mais si vous "importez" simplement le fichier, il n'est souvent pas converti en UTF-8.

Mais si vous importez le CSV dans une feuille de calcul Google existante, il est converti en UTF-8.

Voici une recette:

  • Sur l'écran principal de Docs (ou Drive), cliquez sur le bouton "Créer" et choisissez "Feuille de calcul"
  • Dans le menu "Fichier", choisissez "Importer"
  • Cliquez sur "Choisir un fichier"
  • Choisissez "Remplacer la feuille de calcul"
  • Choisissez le caractère que vous utilisez comme séparateur
  • Cliquez sur "Importer"
  • Dans le menu "Fichier", choisissez "Télécharger en tant que" -> CSV (feuille actuelle)

Le fichier résultant sera en UTF-8


2
Le problème avec cette réponse est de savoir comment vous avez généré le fichier CSV en premier lieu. Si vous avez fait cela en simplifiant l'enregistrement au format CSV dans Excel, le fichier CSV sera dans cp1252, qui est un codage d'un octet par point de code. Cela entraînera une perte d'informations en ce qui concerne les caractères qui ne peuvent pas tenir dans un octet.
Flimm

Eh bien, c'est un problème avec l'une de ces réponses. Et sera avec n'importe quelle réponse sur la façon de convertir en UTF-8 car il n'y a aucun moyen de savoir ou de contrôler quel était l'encodage d'origine.
RedYeti

1
Certaines des réponses parlent de la façon de contourner ce problème, par exemple, stackoverflow.com/a/15500052/247696
Flimm

13

Utilisation de Notepad ++

Cela corrigera le fichier CSV corrompu enregistré par Excel et le ré-enregistrera dans l'encodage approprié.

  • Exporter CSV depuis Excel
  • Charger dans le bloc-notes ++
  • Correction de l'encodage
  • sauver

Excel enregistre dans CP-1252 / Windows-1252. Ouvrez le fichier CSV dans Notepad ++. Sélectionner

Encoding > Character Sets > Western European > Windows-1252

alors

Encoding > Convert to UTF-8
File > Save

Dites d'abord à Notepad ++ l'encodage, puis convertissez. Certaines de ces autres réponses sont en cours de conversion sans définir d'abord le codage approprié, ce qui altère encore plus le fichier. Ils tournent ce qui devrait être en . Si votre personnage ne rentre pas dans le CP-1252, il était déjà perdu lors de son enregistrement au format CSV. Utilisez une autre réponse pour cela.


Je peux me tromper, mais vous ne pouvez pas enregistrer le fichier en tant que ".csv" dans Notepad ++ et c'est de quoi il s'agit.
Daniel Maurer

1
Oui, vous pouvez. Vous enregistrez simplement un fichier texte et vous êtes un fichier .csvtexte. Cette réponse ouvrira le fichier CSV corrompu par Excel, le corrigera, puis le ré-enregistrera avec l'encodage approprié.
Chloe

Ce que vous communiquez a des conséquences d'une portée considérable. En utilisant cette méthode éminente, nous pouvons atteindre une meilleure qualité de données! Bravo! (Quiz: pourquoi ce commentaire est-il si interrogateur?)
thymaro

9

Sous Excel 2016 et versions ultérieures (y compris Office 365), il existe une option CSV dédiée au format UTF-8.

Dans Office 365, faites Enregistrer sous; là où auparavant on aurait pu choisir CSV (délimité par des virgules), maintenant l'un des types de fichiers que vous pouvez enregistrer est CSV UTF-8 (délimité par des virgules) (* .csv)


1
Vous devez fournir quelques instructions sur la façon d'utiliser cette option.
rovyko

1
@dexgecko bien sûr: cela s'appelle le bouton / menu "Enregistrer". Il existe maintenant quatre types d'exportation CSV dans Excel 2016 sur Windows: CSV enregistre en tant que "ANSI" (Latin1 plus ou moins équivalent, mais cela peut être différent avec une installation de système d'exploitation non occidental, je ne suis pas sûr), UTF-8 CSV enregistre en UTF-8 avec BOM, CSV (DOS) enregistre en CP850 (encore une fois, mais dépend de l'installation?) et CSV (Mac) enregistre en tant que MacRoman.

Cependant, Excel ne pourra lire que les fichiers CSV UTF-8 et ANSI (Excel peut utiliser la nomenclature pour choisir). Pour importer à partir d'un autre encodage, renommez-le en .txt, ouvrez à partir d'Excel (vous avez alors une longue liste d'encodages à choisir), et comme il n'interprète pas correctement le séparateur, utilisez le bouton "convertir" pour diviser les lignes. Vous pouvez également utiliser cette astuce lors de l'importation d'un CSV à partir d'une convention de langue différente (en français par exemple, le séparateur déposé est un point-virgule, car la virgule est déjà utilisée comme séparateur décimal).

1
@ Jean-ClaudeArbaut Strange, je ne vois pas d'option CSV UTF-8 dans mon Excel 2016.
rovyko

1
@dexgecko Strange, en effet. Selon cette page , désolée, la fonctionnalité a été ajoutée en novembre 2016, dans la version build 1610. J'ai actuellement la version 1802. Cependant, je pensais que seul Office 365 avait ce genre d'évolutions, et j'utilise Office Pro 2016 (pas la version 365). Essayez peut-être de mettre à jour votre Office.

8

Pour ceux qui recherchent une solution entièrement programmatique (ou au moins côté serveur), j'ai eu beaucoup de succès en utilisant l'outil xls2csv de catdoc.

Installez catdoc:

apt-get install catdoc

Faites la conversion:

xls2csv -d utf-8 file.xls > file-utf-8.csv 

C'est extrêmement rapide.

Notez qu'il est important d'inclure l' -d utf-8indicateur, sinon il encodera la sortie dans l' cp1252encodage par défaut et vous risquez de perdre des informations.

Notez que xls2csvne fonctionne également qu'avec des .xlsfichiers, il ne fonctionne pas avec des .xlsxfichiers.


Ou choisissez un encodage de sortie différent, ne peut pas résoudre les problèmes de tout le monde avec une seule réponse :-)
mpowered

2
Je sais qu'il est malheureux, mais le fait est que cette réponse sera causer des problèmes pour certains utilisateurs. Le fait que vous n'ayez jamais exécuté cela qu'avec des caractères qui correspondent à cp1252 est juste chanceux, vous n'avez fourni aucun avertissement concernant ce risque dans la réponse, vous venez de dire qu'il "fonctionnait sans accroc". On ne vous a pas demandé de résoudre les problèmes de tout le monde, juste les PO, que beaucoup de gens partagent.
Flimm

1
Voilà, j'ai résolu le problème dans le message de réponse et supprimé le downvote.
Flimm

7

Qu'en est-il de l'utilisation de Powershell?

Get-Content 'C:\my.csv' | Out-File 'C:\my_utf8.csv' -Encoding UTF8

1
Le texte des caractères espagnols non-ascii passera du caractère espagnol d'origine à la chaîne de codage utilisée par ANSI. Ainsi, le texte ne sera pas le même que l'original.
Jason Williams

7

Manière la plus simple: pas besoin d'Open Office et de Google Documents

  1. Enregistrez votre fichier en tant que "fichier texte Unicode";
  2. vous avez maintenant un fichier texte unicode
  3. ouvrez-le avec "bloc-notes" et "Enregistrer sous" en sélectionnant "utf-8" ou une autre page de code que vous souhaitez
  4. renommer l'extension de fichier de "txt" en "csv". Cela se traduira par un fichier csv UTF-8 délimité par des tabulations.
  5. Si vous voulez un fichier délimité par des virgules , ouvrez le csvfichier que vous venez de renommer et remplacez tous les onglets par des virgules. Pour ce faire, dans le Bloc-notes sur Win 10, sélectionnez simplement un champ d'onglet puis cliquez sur Ctrl+H. Dans la fenêtre qui s'ouvre, tapez une virgule ,dans le champ "Remplacer par" puis cliquez sur "Remplacer tout". Enregistrez votre fichier. Le résultat sera un fichier csv UTF-8 délimité par des virgules.

Ne l'ouvrez pas avec MS-Office de toute façon !!! Vous disposez maintenant d'un fichier CSV délimité par des tabulations. Ou, une virgule si vous avez appliqué l'étape numéro 5.


2
Pour un fichier délimité par des tabulations, il peut être préférable d'utiliser une .txtextension. csv, c'est-à-dire des fichiers séparés par des virgules, est tout simplement déroutant.
dof1985

5

Aussi drôle que cela puisse paraître, le moyen le plus simple que j'ai trouvé pour enregistrer ma feuille de calcul de 180 Mo dans un fichier CSV UTF8 était de sélectionner les cellules dans Excel, de les copier et de coller le contenu du presse-papiers dans SublimeText.


1
Cela fonctionne car Excel fournit une version TSV de la sélection via le presse-papiers. Vous pouvez également utiliser le Bloc-notes au lieu de SublimeText, mais n'oubliez pas d'enregistrer avec l'encodage UTF-8 si vous le faites!
Don Cruickshank


3

En supposant un environnement Windows, enregistrez et travaillez avec le fichier comme d'habitude dans Excel, puis ouvrez le fichier Excel enregistré dans Gnome Gnumeric (gratuit). Enregistrez la feuille de calcul de Gnome Gnumeric au format CSV qui - pour moi en tout cas - l'enregistre au format UTF-8 CSV.


3

Un moyen facile de le faire: téléchargez Open Office ( ici ), chargez la feuille de calcul et ouvrez le fichier Excel ( .xlsou .xlsx). Ensuite, enregistrez-le simplement en tant que fichier texte CSV et une fenêtre s'ouvre vous demandant de conserver le format actuel ou de l'enregistrer au format .ODF. sélectionnez «conserver le format actuel» et dans la nouvelle fenêtre, sélectionnez l'option qui vous convient le mieux, en fonction de la langue dans laquelle votre fichier a été écrit. Pour la langue espagnole, sélectionnez Europe occidentale ( Windows-1252/ WinLatin 1) et le fichier fonctionne très bien. Si vous sélectionnez Unicode ( UTF-8), cela ne fonctionnera pas avec les caractères espagnols.


3
Il n'y a aucune raison pour que UTF-8 ne fonctionne pas avec les caractères espagnols.
Flimm

3
  1. Enregistrer le fichier xls (fichier Excel) au format Unicode => le fichier sera enregistré au format texte (.txt)

  2. Changez le format de .txt en .csv (renommez le fichier de XYX.txt en XYX.csv


3
Cela ne fonctionne pas car vos instructions n'incluent pas l'étape nécessaire de conversion des onglets en virgules dans les données du fichier.
Matthew Rodatus du

1
Le "texte Unicode" d'Excel est UTF-16, pas UTF-8 comme demandé dans la question.
Flimm

3

J'ai également rencontré le même problème, mais il existe une solution simple à ce problème.

  1. Ouvrez votre fichier xlsx dans Excel 2016 ou supérieur.
  2. Dans "Enregistrer sous", choisissez cette option: "(CSV UTF-8 (délimité par des virgules) *. Csv)"

Il fonctionne parfaitement et un fichier csv est généré qui peut être importé dans n'importe quel logiciel. J'ai importé ce fichier csv dans ma base de données SQLITE et il fonctionne parfaitement avec tous les caractères unicode intacts.


Cette option n'est pas disponible dans ma copie d'Excel 2016. Utilisez-vous la version Office 365?
Don Cruickshank

2

Je suis tombé sur le même problème et j'ai recherché ce message sur Google. Rien de ce qui précède n'a fonctionné pour moi. Enfin, j'ai converti mon .xls Unicode en .xml (choisissez Enregistrer sous ... Feuille de calcul XML 2003) et il a produit le bon caractère. Ensuite, j'ai écrit du code pour analyser le xml et extrait le contenu pour mon usage.


2

J'ai écrit un petit script Python qui peut exporter des feuilles de calcul en UTF-8.

Il vous suffit de fournir le fichier Excel comme premier paramètre suivi des feuilles que vous souhaitez exporter. Si vous ne fournissez pas les feuilles, le script exportera toutes les feuilles de calcul présentes dans le fichier Excel.

#!/usr/bin/env python

# export data sheets from xlsx to csv

from openpyxl import load_workbook
import csv
from os import sys

reload(sys)
sys.setdefaultencoding('utf-8')

def get_all_sheets(excel_file):
    sheets = []
    workbook = load_workbook(excel_file,use_iterators=True,data_only=True)
    all_worksheets = workbook.get_sheet_names()
    for worksheet_name in all_worksheets:
        sheets.append(worksheet_name)
    return sheets

def csv_from_excel(excel_file, sheets):
    workbook = load_workbook(excel_file,use_iterators=True,data_only=True)
    for worksheet_name in sheets:
        print("Export " + worksheet_name + " ...")

        try:
            worksheet = workbook.get_sheet_by_name(worksheet_name)
        except KeyError:
            print("Could not find " + worksheet_name)
            sys.exit(1)

        your_csv_file = open(''.join([worksheet_name,'.csv']), 'wb')
        wr = csv.writer(your_csv_file, quoting=csv.QUOTE_ALL)
        for row in worksheet.iter_rows():
            lrow = []
            for cell in row:
                lrow.append(cell.value)
            wr.writerow(lrow)
        print(" ... done")
    your_csv_file.close()

if not 2 <= len(sys.argv) <= 3:
    print("Call with " + sys.argv[0] + " <xlxs file> [comma separated list of sheets to export]")
    sys.exit(1)
else:
    sheets = []
    if len(sys.argv) == 3:
        sheets = list(sys.argv[2].split(','))
    else:
        sheets = get_all_sheets(sys.argv[1])
    assert(sheets != None and len(sheets) > 0)
    csv_from_excel(sys.argv[1], sheets)

Je l' ai mis à jour la mise en œuvre un peu et créé un point essentiel gist.github.com/julianthome/2d8546e7bed869079ab0f409ae0faa87
Julian

2

Excel enregistre généralement un fichier csv en tant que codage ANSI au lieu de utf8.

Une option pour corriger le fichier consiste à utiliser le Bloc-notes ou le Bloc-notes ++:

  1. Ouvrez le fichier .csv avec le bloc-notes ou le bloc-notes ++.
  2. Copiez le contenu dans le presse-papiers de votre ordinateur.
  3. Supprimez le contenu du fichier.
  4. Changez l'encodage du fichier en utf8.
  5. Collez le contenu du presse-papiers.
  6. Enregistrez le fichier.

Vous n'êtes pas sûr des anciennes versions de NP ++, mais dans la version actuelle, vous pouvez simplement sélectionner Encodage> Convertir en UTF-8. remplace les étapes 2 à 5
Felk

1

Une deuxième option pour "nevets1219" consiste à ouvrir votre fichier CSV dans Notepad ++ et à effectuer une conversion en ANSI.

Choisissez dans le menu supérieur: Encodage -> Convertir en Ansi


Je ne sais pas pourquoi vous avez été rétrogradé. Notepad ++ l'a fait pour moi. Impossible de stocker mon fichier dans la feuille de calcul Google car il est confidentiel.
Zane

3
Le problème avec cette réponse est de savoir comment vous générez le fichier CSV en premier lieu. Si vous enregistrez simplement au format CSV à partir d'Excel, l'encodage sera cp1252, qui est un encodage à un octet par point de code, et perdra donc des informations pour les caractères qui ne correspondent pas à cela. En outre, à la fin, vous devez vous convertir en UTF-8 et non en Ansi, si vous voulez faire ce que la question demandait.
Flimm

C'est de loin la réponse la plus facile de l'OMI. J'utilise Excel 2016 et je l'ai trouvé par défaut en encodage ANSI, mais je l'ai obtenu en UTF-8, ce que je voulais.
rovyko

1

Encodage -> Convertir en Ansi le codera en ANSI / UNICODE. Utf8 est un sous-ensemble d'Unicode. Peut-être que dans ANSI sera encodé correctement, mais ici nous parlons de UTF8, @SequenceDigitale.

Il existe des moyens plus rapides, comme l'exportation au format csv (délimité par des virgules), puis l'ouverture de ce csv avec Notepad ++ (gratuit), puis l'encodage> Convertir en UTF8. Mais seulement si vous devez le faire une fois par fichier. Si vous devez modifier et exporter correctement, la meilleure solution est LibreOffice ou GDocs.


5
"Utf8 est un sous-ensemble d'Unicode": cela n'a aucun sens. UTF-8 est un codage Unicode.
jameshfisher

Je ne suis pas sûr de pouvoir trouver cette option "Encodage -> Convertir en Ansi".
Flimm

Un simple csv ANSI dans Notepad ++ et la modification du codage du fichier en utf8 entraîne la conversion des caractères espagnols non ascii d'origine en chaînes de codage qui ne correspondent pas au texte d'origine.
Jason Williams

1

Microsoft Excel a une option pour exporter une feuille de calcul en utilisant le codage Unicode. Voir capture d'écran suivante.

entrez la description de l'image ici


14
"Unicode Text" enregistre en UTF-16 LE (Little Endian), pas en UTF-8 comme demandé par l'OP.
hache.

Oui, mais c'est le meilleur moyen d'obtenir la prise en charge Unicode pour vos valeurs séparées par x dans Excel. J'ai eu toutes sortes de problèmes en essayant d'amener Excel à jouer avec UTF-8! Lire la suite
mcNux

1

ouvrir .csv très bien avec notepad ++. si vous voyez que votre encodage est bon (vous voyez tous les caractères tels qu'ils devraient être), appuyez sur l'encodage, puis convertissez-le en ANSI - découvrez quel est votre encodage actuel


qui a fonctionné pour moi .. a eu un problème avec les caractères grecs lors de l'exportmysql db en tant que csv et l'a importé pour exceller ..
nikolas

1
Le problème avec cela est comment vous générez le fichier CSV en premier lieu. Si vous enregistrez simplement en tant que fichier CSV dans Excel, il l'enregistrera dans cp1252, qui est un codage d'un octet par point de code, et perd donc des informations.
Flimm

1

une autre solution consiste à ouvrir le fichier par winword et à l'enregistrer sous txt puis à le rouvrir par excel et cela fonctionnera ISA


1

Boîte de dialogue Enregistrer> bouton Outils> Options Web> onglet Encodage


Ça ne marche pas pour moi. D'après ce que je comprends, cela ne prend effet que lors de l'enregistrement au format Web (HTML, etc.), pas lors de l'enregistrement au format CSV.
jogojapan

Works for me - Office 2007
Elia Weiss

ne travaille pas sur Office 2010 en choisissant un profil CSV.
Hart

0

J'ai le même problème et je tombe sur cet add-in, et cela fonctionne parfaitement bien dans Excel 2013 à côté d'Excel 2007 et 2010 pour lequel il est mentionné.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.