2009-02-03 9 views
54

J'ai une application Java qui lit les fichiers CSV qui ont été créés dans Excel (par exemple 2007). Est-ce que quelqu'un sait quel jeu de caractères MS Excel utilise pour enregistrer ces fichiers?Quel jeu de caractères Microsoft Excel utilise-t-il lors de l'enregistrement de fichiers?

je l'aurais deviné soit:

  • fenêtres-1255 (Cp1255)
  • ISO-8859-1
  • UTF8

mais je suis incapable de décoder les caractères étendus (par exemple caractères accentués français) en utilisant l'un de ces types de jeu de caractères.

Répondre

13

fichiers CSV peuvent être dans tous les formats, selon l'option de codage a été spécifié lors de l'exportation à partir d'Excel: (dialogue Enregistrer, bouton Outils, Options Web article, encodage Tab)

MISE À JOUR: Excel (y compris Office de 2013) ne respecte pas les options web sélectionnées dans la boîte de dialogue "save as ...", il s'agit donc d'un bug. Je viens d'utiliser OpenOffice Calc maintenant pour ouvrir mes fichiers XLSX et les exporter en tant que fichiers CSV (modifier les paramètres de filtre, choisissez l'encodage UTF-8).

+4

et l'encodage par défaut est "ANSI", généralement l'un des cp1250 à cp1258. –

+0

Mon encodage par défaut est UTF-8, mais c'est probablement parce que je l'ai sélectionné par le passé et Excel se souvient juste de ma sélection de la dernière fois que j'ai sauvegardé un fichier CSV. Cette sélection semble persister même après la fermeture et la relance d'Excel. – Triynko

+14

Les "Options Web" ne s'appliquent pas aux exportations CSV (au moins avec Excel 2007). L'encodage du fichier CSV semble suivre le codage par défaut de l'installation. Cela peut donc être n'importe quoi, en pratique. Malheureusement, il ne semble pas y avoir de moyen de contrôler cela à l'export. – gawi

-3

OOXML des fichiers comme ceux qui viennent d'Excel 2007 sont encodés en UTF-8, selon wikipedia. Je ne sais pas sur les fichiers CSV, mais il va de soi qu'il utiliserait le même format ...

3

J'ai eu un problème similaire la semaine dernière. J'ai reçu un certain nombre de fichiers CSV avec différents encodages. Avant d'importer dans la base de données j'ai ensuite utilisé le chardet libary pour détecter automatiquement l'encodage correct. Chardet est un port du moteur de détection de personnage Mozilla et si la taille de l'échantillon est assez grande (un caractère accentué ne fera pas) fonctionne très bien.

2

Russian Edition offre CSV, CSV (Macintosh) et CSV (DOS).

Lors de l'enregistrement en CSV, il utilise windows-1251.

Je viens d'essayer de sauver mot français Résumé ainsi que le texte russe, il a sauvé dans HEX comme 52 3F 73 75 6D 3F, 3F étant le code ASCII pour question mark.

Quand j'ai ouvert le fichier CSV, le mot, bien sûr, est devenu illisible (R?sum?)

0

CP1250 est largement utilisé dans les documents Microsoft Office, y compris Word et Excel 2003.

http://en.wikipedia.org/wiki/Windows-1250

Un moyen simple de confirmer cela serait:

  1. Créer une feuille de calcul avec plus haut des caractères de commande, par ex. "Veszprém" dans l'une des cellules; Utilisez votre langage de script favori pour analyser et décoder la feuille de calcul;
  2. Regardez ce que produit votre script lorsque vous imprimez les données décodées.

Exemple script perl:

#!perl 

use strict; 

use Spreadsheet::ParseExcel::Simple; 
use Encode qw(decode); 

my $file = "my_spreadsheet.xls"; 

my $xls  = Spreadsheet::ParseExcel::Simple->read($file); 
my $sheet = [ $xls->sheets ]->[0]; 

while ($sheet->has_data) { 

    my @data = $sheet->next_row; 

    for my $datum (@data) { 
     print decode('cp1250', $datum); 
    } 

} 
+4

"cp1250 est largement utilisé dans les documents Microsoft Office" ... dans VOTRE cou de la forêt. cp125n est largement utilisé dans le monde entier, pour 0 <= n <= 8. –

37

De mémoire, Excel utilise le codage ANSI machine spécifique. Donc, ce serait Windows-1252 pour une installation EN-US, 1251 pour le russe, etc.

+0

True mais Excel 2007 permet à l'utilisateur (s'il trouve le bouton Outils!) de choisir parmi une longue liste; "ANSI" est la valeur par défaut. –

+7

Voilà comment cela devrait fonctionner, mais la fonctionnalité est cassée. Au lieu d'honorer l'option "Enregistrer ce document en tant que:" que vous sélectionnez dans le dialogue Enregistrer/sous/menu Outils/option Web/onglet Codage, Excel utilise simplement l'ensemble de pages de codes dans les paramètres Région et Langue. – Triynko

-2

S'il est vrai que l'exportation d'un fichier Excel contenant des caractères spéciaux vers csv peut être pénible, il y a cependant un travail simple: il suffit de copier/coller les cellules dans un google docs puis de sauvegarder .

+5

On dirait qu'ils cherchaient une solution programmatique. Copier et coller ne correspond pas vraiment à la réalité. En outre, cette question est * assez * ancienne. Il est préférable d'éviter de ressusciter les anciens threads, sauf si la réponse apporte quelque chose de significatif par rapport aux réponses précédentes. – Leigh

+0

Eh bien, si vous le dites. Cependant, la réponse la mieux notée ne fonctionne pas (voir les commentaires) et ce n'est pas non plus une solution programmatique. De plus, ma solution fonctionne. Enfin, le sujet peut être vieux, il apparaît toujours sur la première page quand googler le problème, et il n'y a pas de solution de travail sur le fil, mais le mien. –

+0

En fait, les commentaires disent que c'est bug. Ils suggèrent également deux alternatives, évidemment pas idéales: OpenOffice ou en modifiant les paramètres régionaux et linguistiques. Donc, je ne suis pas sûr que cette suggestion soit une amélioration significative par rapport à celles déjà données. Maintenant, s'il y avait une solution dans les versions ultérieures, ou une alternative programmatique, je suis sûr que d'autres aimeraient l'entendre. – Leigh

0

Vous pouvez utiliser cette Visual Studio Code VB.Net pour obtenir l'encodage:

Dim strEncryptionType As String = String.Empty 
Dim myStreamRdr As System.IO.StreamReader = New System.IO.StreamReader(myFileName, True) 
Dim myString As String = myStreamRdr.ReadToEnd() 
strEncryptionType = myStreamRdr.CurrentEncoding.EncodingName 
2

Se réveiller ce vieux fil ... Nous sommes maintenant en 2017. Et encore Excel ne peut pas enregistrer une simple feuille de calcul dans un format CSV tout en préservant l'encodage original ... Tout simplement incroyable.

Heureusement, Google Docs vit au bon siècle. La solution pour moi consiste simplement à ouvrir la feuille de calcul à l'aide de Google Docs, puis à la télécharger au format CSV. Le résultat est un fichier CSV correctement encodé (avec toutes les chaînes codées en UTF8).

Questions connexes