web-dev-qa-db-fra.com

Excel au format CSV avec encodage UTF8

J'ai un fichier Excel contenant des caractères espagnols (tildes, etc.) que je dois convertir en fichier CSV pour pouvoir être utilisé comme fichier d'importation. Cependant, lorsque je réalise une sauvegarde au format CSV, il modifie les caractères espagnols "spéciaux" qui ne sont pas des caractères ASCII. Cela semble également être le cas avec les guillemets gauche et droit et les longs tirets qui semblent provenir de l’utilisateur original qui a créé le fichier Excel sous Mac.

Comme le format CSV n'est qu'un fichier texte, je suis sûr qu'il peut gérer un codage UTF8. Je suppose donc qu'il s'agit d'une limitation d'Excel, mais je cherche un moyen de passer d'Excel au format CSV tout en conservant les caractères non-ASCII. intact.

575
Jeff Treuting

Une solution simple consiste à utiliser Google Spreadsheet. 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 limites lors de l'importation. Voir ici .

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

EDIT: ne autre alternative - ils utilisent essentiellement la macro ou les addins VB pour forcer la sauvegarde au format UTF8. Je n'ai essayé aucune de ces solutions, mais elles semblent raisonnables.

387
nevets1219

J'ai trouvé que l'application de tableur de OpenOffice , Calc, est vraiment efficace pour la gestion des données CSV.

Dans la boîte de dialogue "Enregistrer sous ...", cliquez sur "Options de format" pour obtenir différents codages pour CSV. LibreOffice fonctionne de la même façon, autant que je sache.

calc save dialog

125
aendrew
  1. Enregistrez la feuille Excel en tant que "Texte Unicode (.txt)". La bonne nouvelle est que tous les caractères internationaux sont en UTF16 (remarque, pas en UTF8). Toutefois, le nouveau fichier "* .txt" est délimité par des tabulations, non par des virgules et n'est donc pas un vrai fichier CSV.

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

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

Si UTF-16 a été correctement implémenté avec la prise en charge de 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.

110
elomage

Je sais que c’est une vieille question, mais j’ai été confronté à cette question tout en luttant avec les mêmes problèmes que le PO.

N'ayant trouvé aucune des solutions proposées comme une option viable, je me suis mis à la recherche d'un moyen de le faire en utilisant simplement Excel.

Heureusement, j'ai constaté que le problème des personnages perdus ne se produit que (dans mon cas) lors de l'enregistrement du format xlsx au format csv. J'ai essayé de sauvegarder le fichier xlsx d'abord en xls, puis en csv. Cela a réellement fonctionné.

S'il vous plaît essayer et voir si cela fonctionne pour vous. Bonne chance.

41
Eric

Vous pouvez utiliser la commande iconv sous Unix (également disponible sous Windows sous le nom libiconv ).

Après avoir enregistré en tant que CSV sous Excel dans la ligne de commande, entrez:

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

(souvenez-vous de remplacer cp1250 par votre encodage).

Fonctionne rapidement et convient parfaitement aux gros fichiers tels que la base de données de codes postaux, qui ne peuvent pas être importés dans GoogleDocs (limite de 400 000 cellules).

35
pmilewski

Le seul "moyen facile" de le faire est le suivant. Tout d’abord, sachez 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 contenant les informations (.xls, .xlsx)
  2. Dans Excel, choisissez "CSV (délimité par des virgules) (* .csv)" comme type de fichier et enregistrez sous ce type.
  3. Dans le bloc-notes (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 zone "Enregistrer sous", une zone de sélection intitulée "Encodage". Sélectionnez UTF-8 (n'utilisez PAS ANSI ou vous perdez tous les accents, etc.). Après avoir sélectionné UTF-8, enregistrez le fichier sous un nom de fichier légèrement différent de celui d'origine.

Ce fichier est au format UTF-8. Il conserve tous les caractères et les 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 .

24
Nick

Vous pouvez le faire sur une machine Windows moderne sans logiciel tiers. Cette méthode est fiable et gérera les données contenant des virgules, des tabulations, des caractères CJK, etc.

1. Sauvegarder à partir d'Excel

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

2. Démarrer PowerShell

Exécutez powershell à partir du menu Démarrer.

. Chargez le fichier dans PowerShell

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

4. Enregistrer les données au format CSV

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

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

22
leander

"nevets1219" a raison sur Google Documents. Toutefois, si vous "importez" simplement le fichier, il ne sera souvent pas converti au format UTF-8.

Toutefois, si vous importez le fichier CSV dans une feuille de calcul Google existante, il est converti au format UTF-8.

Voici une recette:

  • Sur l'écran principal de Google Documents (ou Lecteur), 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 personnage 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

14
RedYeti

Utiliser Notepad ++

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

  • Exporter un fichier CSV à partir d'Excel
  • Charger dans Notepad ++
  • 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

Ensuite

Encoding > Convert to UTF-8
File > Save

Commencez par informer Notepad ++ du codage, alors convertir. Certaines de ces autres réponses sont en train de convertir sans définir le bon codage, ce qui altère encore plus le fichier. Ils transformeraient 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.

10
Chloe

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

Installez catdoc:

apt-get install catdoc

Faire la conversion:

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

C'est flamboyant.

Notez qu'il est important d'inclure l'indicateur -d utf-8, sinon le code sera codé en sortie dans le codage par défaut cp1252 et vous risqueriez de perdre des informations.

Notez que xls2csv ne fonctionne également qu'avec les fichiers .xls, il ne fonctionne pas avec les fichiers .xlsx.

8
mpowered

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

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

Moyen le plus simple: Inutile Open Office et Google Docs

  1. Enregistrez votre fichier en tant que "fichier texte Unicode";
  2. maintenant vous avez un fichier texte unicode
  3. ouvrez-le avec "notepad" et "Save as" en sélectionnant "utf-8" ou une autre page de code de votre choix
  4. renommer l'extension de fichier de "txt" à "csv". Cela donnera un fichier csv UTF-8 délimité par des tabulations.
  5. Si vous voulez un fichier délimité par virgule , ouvrez le fichier csv que vous venez de renommer et remplacez tous les onglets par des virgules. Pour ce faire, dans Notepad sous Windows 10, sélectionnez simplement un champ de tabulation, 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 séparé par des virgules.

Ne l'ouvrez pas avec MS-Office de toute façon !!!Vous avez maintenant un fichier CSV délimité par des tabulations. Ou un fichier délimité par des virgules si vous avez appliqué l'étape n ° 5.

6
Solivan

Aussi drôle que cela puisse paraître, le moyen le plus simple de sauvegarder 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.

5
oscaroscar

Sous Excel 2016, nous avons une option d'exportation CSV dédiée au format UTF-8.

4
  1. Enregistrer le fichier xls (fichier Excel) sous forme de texte 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
Mena

Je n'ai pas été en mesure de trouver une solution VBA pour ce problème sur Mac Excel. Il semblait simplement n'y avoir aucun moyen de produire du texte UTF-8.

J'ai donc finalement dû abandonner VBA, mordre la balle et apprendre AppleScript. Ce n'était pas aussi grave que je l'avais pensé.

La solution est décrite ici: http://talesoftech.blogspot.com/2011/05/Excel-on-mac-goodbye-vba-hello.html

3
anroy

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

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

Cela fonctionne parfaitement et un fichier csv est généré et 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.

3
Krish

Un moyen facile de le faire: téléchargez Open Office ( here ), chargez la feuille de calcul et ouvrez le fichier Excel (.xls ou .xlsx). Il suffit ensuite de l’enregistrer en tant que fichier texte CSV. Une fenêtre s’ouvre et vous invite à conserver le format actuel ou à 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 l’Europe occidentale (Windows-1252/ WinLatin 1) et le fichier fonctionne parfaitement. Si vous sélectionnez Unicode (UTF-8), cela ne fonctionnera pas avec les caractères espagnols.

3
Yessus

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

3
spring_chicken

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

Une option pour corriger le fichier est d'utiliser Notepad ou Notepad ++:

  1. Ouvrez le fichier .csv avec Notepad ou Notepad ++.
  2. Copiez le contenu dans le presse-papier de votre ordinateur.
  3. Supprimer le contenu du fichier.
  4. Modifiez le codage du fichier en utf8.
  5. Coller le contenu du presse-papiers.
  6. Enregistrez le fichier.
2
Jason Williams

J'ai écrit un petit script Python pouvant exporter des feuilles de calcul au format UTF-8.

Vous devez simplement fournir le fichier Excel en tant que 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)
2
Julian

Je suis tombé sur le même problème et avons googlé ce post. Aucun de ce qui précède n'a fonctionné pour moi. Enfin, j'ai converti mes fichiers .xls Unicode en fichiers .xml (choisissez Enregistrer sous ... Tableur XML 2003) et le caractère correct a été généré. Ensuite, j'ai écrit du code pour analyser le XML et extrait le contenu pour mon usage.

2
Silent Sojourner

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

Il existe des moyens plus rapides, comme exporter au format csv (délimité par des virgules), puis, ouvrir ce csv avec Notepad ++ (free), puis encoder> Convertir en UTF8. Mais seulement si vous devez le faire une fois par fichier. Si vous devez modifier et exporter régulièrement, le meilleur est la solution LibreOffice ou GDocs.

1
Lucas

une autre solution consiste à ouvrir le fichier par winword et à l'enregistrer au format txt, puis à le rouvrir par Excel et cela fonctionnera ISA

1
Essam Altantawi

Microsoft Excel dispose d'une option pour exporter une feuille de calcul à l'aide du codage Unicode. Voir la capture d'écran suivante.

enter image description here

1
vladaman

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

1
Elia Weiss

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

Choisissez dans le menu du haut: Encodage -> Convertir en Ansi

1
SequenceDigitale.com

ouvrez le fichier .csv avec Notepad ++. si vous voyez que l'encodage est bon (vous voyez tous les caractères comme ils devraient l'être), appuyez sur l'encodage, puis convertissez-le en ANSI sinon - découvrez quel est votre encodage actuel

1
Marius Gri

J'ai le même problème et rencontré cela ajouter, et cela fonctionne parfaitement dans Excel 2013 à côté d'Excel 2007 et 2010 pour lequel il est mentionné.

0
academic.user

J'avais besoin d'automatiser ce processus sur mon Mac. J'ai initialement essayé d'utiliser catdoc/xls2csv comme suggéré par mpowered, mais xls2csv avait des difficultés à détecter le codage d'origine du document et tous les documents n'étaient pas identiques. J'ai fini par définir le codage de sortie de page Web par défaut sur UTF-8, puis de fournir les fichiers à Automator d'Apple, en appliquant l'action Convert Format of Excel Files à convertir en Web Page (HTML). Puis, en utilisant PHP, DOMDocument et XPath, j'ai interrogé les documents et les ai formatés en CSV.

Voici le script PHP (process.php):

<?php
$pi = pathinfo($argv[1]);
$file = $pi['dirname'] . '/' . $pi['filename'] . '.csv';
$fp = fopen($file,'w+');
$doc = new DOMDocument;
$doc->loadHTMLFile($argv[1]);
$xpath = new DOMXPath($doc);
$table = [];
foreach($xpath->query('//tr') as $row){
    $_r = [];
    foreach($xpath->query('td',$row) as $col){
        $_r[] = trim($col->textContent);
    }
    fputcsv($fp,$_r);
}
fclose($fp);
?>

Et voici la commande Shell que j'ai utilisée pour convertir les documents HTML en CSV:

find . -name '*.htm' | xargs -I{} php ./process.php {}

C’est une façon vraiment très détournée de faire cela, mais c’est la méthode la plus fiable que j’ai trouvée.

0
Kyle