Quel encodage ouvre correctement les fichiers CSV avec Excel sur Mac et Windows?

nous avons une application web qui exporte des fichiers CSV contenant des caractères étrangers avec UTF-8, Pas de BOM. Les utilisateurs de Windows et de Mac obtiennent des caractères d'ordures dans Excel. J'ai essayé de convertir en UTF-8 avec BOM; Excel / Win est d'accord avec cela, Excel/Mac montre du charabia. J'utilise Excel 2003 / Win, Excel 2011 / Mac. Voici tous les encodages que j'ai essayé:

Encoding  BOM      Win                            Mac
--------  ---      ----------------------------   ------------
utf-8     --       scrambled                      scrambled
utf-8     BOM      WORKS                          scrambled
utf-16    --       file not recognized            file not recognized
utf-16    BOM      file not recognized            Chinese gibberish
utf-16LE  --       file not recognized            file not recognized
utf-16LE  BOM      characters OK,                 same as Win
                   row data all in first field

le meilleur est UTF-16LE avec BOM, mais le CSV n'est pas reconnu comme tel. Le séparateur de champ est virgule, Mais point-virgule n'est pas de changer les choses.

y a-t-il un encodage qui fonctionne dans les deux mondes?

117
demandé sur Timm 2011-07-05 23:50:17

15 réponses

Excel Codages

j'ai trouvé l'encodage WINDOWS-1252 le moins frustrant quand il s'agit D'Excel. Étant donné que son jeu de caractères propriétaire est essentiellement Microsofts, on peut supposer qu'il fonctionnera à la fois sur la version Mac et Windows DE MS-Excel. Les deux versions comprennent au moins un sélecteur correspondant "File origin" ou "File encoding" qui lit correctement les données.

selon votre système et les outils que vous utilisez, ce l'encodage pourrait aussi être nommé CP1252 , ANSI , Windows (ANSI) , MS-ANSI ou tout simplement Windows , entre autres variantes.

cet encodage est un super-ensemble de ISO-8859-1 (alias LATIN1 et autres), donc vous pouvez revenir à ISO-8859-1 si vous ne pouvez pas utiliser WINDOWS-1252 pour une raison quelconque. Sachez que ISO-8859-1 manque quelques caractères de WINDOWS-1252 comme montré ici:

| Char | ANSI | Unicode | ANSI Hex | Unicode Hex | HTML entity | Unicode Name                               | Unicode Range            |
| €    | 128  | 8364    | 0x80     | U+20AC      | €      | euro sign                                  | Currency Symbols         |
| ‚    | 130  | 8218    | 0x82     | U+201A      | ‚     | single low-9 quotation mark                | General Punctuation      |
| ƒ    | 131  | 402     | 0x83     | U+0192      | ƒ      | Latin small letter f with hook             | Latin Extended-B         |
| „    | 132  | 8222    | 0x84     | U+201E      | „     | double low-9 quotation mark                | General Punctuation      |
| …    | 133  | 8230    | 0x85     | U+2026      | …    | horizontal ellipsis                        | General Punctuation      |
| †    | 134  | 8224    | 0x86     | U+2020      | †    | dagger                                     | General Punctuation      |
| ‡    | 135  | 8225    | 0x87     | U+2021      | ‡    | double dagger                              | General Punctuation      |
| ˆ    | 136  | 710     | 0x88     | U+02C6      | ˆ      | modifier letter circumflex accent          | Spacing Modifier Letters |
| ‰    | 137  | 8240    | 0x89     | U+2030      | ‰    | per mille sign                             | General Punctuation      |
| Š    | 138  | 352     | 0x8A     | U+0160      | Š    | Latin capital letter S with caron          | Latin Extended-A         |
| ‹    | 139  | 8249    | 0x8B     | U+2039      | ‹    | single left-pointing angle quotation mark  | General Punctuation      |
| Œ    | 140  | 338     | 0x8C     | U+0152      | Œ     | Latin capital ligature OE                  | Latin Extended-A         |
| Ž    | 142  | 381     | 0x8E     | U+017D      |             | Latin capital letter Z with caron          | Latin Extended-A         |
| ‘    | 145  | 8216    | 0x91     | U+2018      | ‘     | left single quotation mark                 | General Punctuation      |
| ’    | 146  | 8217    | 0x92     | U+2019      | ’     | right single quotation mark                | General Punctuation      |
| “    | 147  | 8220    | 0x93     | U+201C      | “     | left double quotation mark                 | General Punctuation      |
| ”    | 148  | 8221    | 0x94     | U+201D      | ”     | right double quotation mark                | General Punctuation      |
| •    | 149  | 8226    | 0x95     | U+2022      | •      | bullet                                     | General Punctuation      |
| –    | 150  | 8211    | 0x96     | U+2013      | –     | en dash                                    | General Punctuation      |
| —    | 151  | 8212    | 0x97     | U+2014      | —     | em dash                                    | General Punctuation      |
| ˜    | 152  | 732     | 0x98     | U+02DC      | ˜     | small tilde                                | Spacing Modifier Letters |
| ™    | 153  | 8482    | 0x99     | U+2122      | ™     | trade mark sign                            | Letterlike Symbols       |
| š    | 154  | 353     | 0x9A     | U+0161      | š    | Latin small letter s with caron            | Latin Extended-A         |
| ›    | 155  | 8250    | 0x9B     | U+203A      | ›    | single right-pointing angle quotation mark | General Punctuation      |
| œ    | 156  | 339     | 0x9C     | U+0153      | œ     | Latin small ligature oe                    | Latin Extended-A         |
| ž    | 158  | 382     | 0x9E     | U+017E      |             | Latin small letter z with caron            | Latin Extended-A         |
| Ÿ    | 159  | 376     | 0x9F     | U+0178      | Ÿ      | Latin capital letter Y with diaeresis      | Latin Extended-A         |

notez que le euro il manque le panneau . Ce tableau se trouve à Alan Wood .

Conversion

La Conversion

se fait différemment dans chaque outil et chaque langue. Cependant, supposons que vous ayez un fichier query_result.csv dont vous savez qu'il est codé UTF-8 . Convertissez-le en WINDOWS-1252 en utilisant iconv :

iconv -f UTF-8 -t WINDOWS-1252 query_result.csv > query_result-win.csv
55
répondu mikezter 2013-11-25 13:31:07

pour UTF-16LE avec BOM si vous utilisez les caractères tab comme vos délimiteurs au lieu des virgules Excel reconnaîtra les champs. La raison pour laquelle cela fonctionne est que Excel finit en fait par utiliser son Unicode *.txt analyseur.

Caveat : si le fichier est édité dans Excel et sauvegardé, il sera sauvegardé sous forme d'ASCII délimité par des onglets. Le problème maintenant est que lorsque vous ré-ouvrez le fichier Excel suppose que C'est réel CSV (avec des virgules), voit que ce n'est pas Unicode, donc le parse comme délimité par des virgules - et donc fera un hachage de celui-ci!

Update : la mise en garde ci-dessus ne semble pas se produire pour moi aujourd'hui dans Excel 2010 (Windows) au moins, bien qu'il semble y avoir une différence dans le comportement d'épargne si:

  • vous éditez et quittez Excel (essaie d'Enregistrer sous 'Unicode *.txt')

comparé à:

  • montage et fermeture juste le fichier (fonctionne comme prévu).
25
répondu Duncan Smart 2013-09-13 13:27:32

La vérité est: Il n'y a pas de solution. Excel 2011 / Mac ne peut pas interpréter correctement un fichier CSV contenant des umlauts et des marques diacritiques, quel que soit l'encodage ou le saut de cerceau que vous faites. Je serais heureux d'entendre quelqu'un me dire différent!

20
répondu Timm 2012-01-30 21:06:50

Vous n'avez essayé séparées par des virgules et des points-virgules CSV séparé. Si vous aviez essayé CSV (aussi appelé TSV) séparé des onglets, vous auriez trouvé la réponse:

UTF-16LE avec BOM (byte order mark), séparé par des tabulations


mais : dans un commentaire vous mentionnez que TSV n'est pas une option pour vous (je n'ai pas été en mesure de trouver cette exigence dans votre question). C'est bien dommage. Cela signifie souvent que vous autorisez l'édition manuelle de fichiers TSV, ce qui n'est probablement pas une bonne idée. La vérification visuelle des fichiers TSV n'est pas un problème. De plus, les éditeurs peuvent afficher un caractère spécial pour marquer les onglets.

et oui, J'ai essayé ça sur Windows et Mac.

8
répondu Walter Tross 2015-03-13 19:14:35

la meilleure solution pour contourner la lecture des fichiers CSV avec UTF-8 sur Mac est de les convertir en format XLSX. J'ai trouvé un script réalisé par Konrad Foerstner, que j'ai légèrement amélioré en ajoutant un support pour différents caractères de délimiteur.

Téléchargez le script de Github https://github.com/brablc/clit/blob/master/csv2xlsx.py . Pour l'exécuter, vous devez installer un module python openpyxl pour le fichier Excel manipulation: sudo easy_install openpyxl .

4
répondu brablc 2013-06-29 23:08:58

Voici la preuve sur l'importation de CSV encodé utf8 dans Excel 2011 Pour Mac: Microsoft dit: "Excel pour Mac ne supporte pas actuellement UTF-8." Excel 2011 pour Mac et UTF-8

Yay, le chemin à parcourir MS!

3
répondu Timm 2013-02-18 18:54:38

il me semble que Excel 2011 Pour Mac OS n'utilise pas L'encodage.GetEncoding ("10000") comme je l'ai pensé et perdu 2 jours avec mais la même iso que sur Microsoft OS. La meilleure preuve pour cela est de faire un fichier dans Excel 2011 Pour MAC avec des caractères spéciaux, le sauver comme CSV et puis l'ouvrir dans Mac Text editor et les caractères sont brouillés.

pour moi cette approche a fonctionné - ce qui signifie que csv export sur Excel 2011 sur MAC OS a des caractères spéciaux d'Europe de l'ouest à l'intérieur:

Encoding isoMacOS = Encoding.GetEncoding("iso-8859-1");
Encoding defaultEncoding = Encoding.Default; 

// Convert the string into a byte array.
byte[] defaultEncodingBytes = defaultEncoding.GetBytes(exportText);

// Perform the conversion from one encoding to the other.
byte[] ansiBytes = Encoding.Convert(defaultEncoding, isoMacOS, defaultEncodingBytes);

decodedString = isoMacOS.GetString(ansiBytes);
2
répondu user525081 2011-10-14 12:05:18

UTF-8 sans BOM fonctionne actuellement pour moi dans Excel Mac 2011 14.3.2.

UTF-8 + BOM genre de travaux, mais BOM rendu comme charabia.

UTF-16 fonctionne si vous importez le fichier et compléter l'assistant, mais pas si vous venez de double-cliquer dessus.

2
répondu Craig Stuntz 2013-04-01 20:56:59

ce qui suit a travaillé pour moi sur Excel pour Mac 2011 et Windows Excel 2002:

  1. en utilisant iconv sur Mac, convertir le fichier en UTF-16 Little-Endian + le nommer *.txt (l' .txt extension des forces Excel pour exécuter l'Assistant Importation de Texte):

    iconv -f UTF-8 -t UTF-16LE filename.csv >filename_UTF-16LE.csv.txt

  2. ouvrir le fichier dans Excel et dans L'Assistant D'importation de texte choisir:

    • Étape 1: Origine du fichier : ignorez-le, peu importe ce que vous choisissez
    • Étape 2: Sélectionner les valeurs appropriées pour délimiteurs et qualificatif du texte
    • Étape 3: si nécessaire, choisir le format des colonnes

PS de L'UTF-16LE créé par iconv a BOM octets FF FE au début.

PPS mon fichier csv original était créé sur un ordinateur Windows 7, dans le format UTF-8 (avec les octets BOM EF BB BF au début) et utilisé des sauts de ligne CRLF. La virgule a été utilisée comme délimiteur de champ et la citation simple comme qualificatif de texte. Il contient des lettres ASCII plus différentes lettres latines avec des tildes, umlaut etc, plus certains Cyrillique. Tous affichés correctement dans les deux Excel pour Win et Mac.

PPP Exacte des versions du logiciel:

* Mac OS X 10.6.8

* Excel pour Mac 2011 c. 14.1.3

* Windows Server 2003 SP2

* Windows Excel 2002 v. 10.2701.2625

2
répondu user3137513 2014-12-29 21:58:26

dans mon cas cela a fonctionné (Mac, Excel 2011, à la fois caractères cyrilliques et latins avec des signes diacritiques Tchèques):

  • Charset UTF-16LE (tout simplement UTF-16 n'était pas suffisant)
  • BOM" \xFF\xFE"
  • \t (tab) comme séparateur
  • N'oubliez pas d'encoder aussi séparateur et CRLFs: -)
  • utiliser iconv au lieu de mb_convert_encoding
2
répondu Marek Demčák 2017-01-15 19:15:55

sur mon Mac OS, Text Wrangler a identifié un fichier CSV créé avec Excel comme ayant un encodage" Western".

après quelques recherches sur Google j'ai fait ce petit script (Je ne suis pas sûr de la disponibilité de Windows, peut-être avec Cygwin ?):

$ cat /usr/local/bin/utf8.sh

#!/bin/bash

INPUTFILE=""

iconv -f macroman -c -t UTF-8 $INPUTFILE |tr '\r' '\n' >/tmp/file.$$.csv

mv $INPUTFILE ms_trash
mv /tmp/file.$$.csv $INPUTFILE
1
répondu user243202 2017-01-15 18:55:35

au lieu de csv, en essayant la sortie html avec une extension XLS et le type mime" application/excel". Je sais que cela va fonctionner dans Windows, mais ne peux pas parler pour MacOS

0
répondu royce3 2011-08-08 20:36:10

Cela fonctionne pour moi

  1. ouvrir le fichier dans BBEdit or TextWrangler*.
  2. définit le fichier comme Unicode (UTF-16 Little-Endian) (les fins de ligne peuvent être Unix ou Windows). Sauver!!!
  3. Dans Excel: Les Données > Données Externes > Importer Un Fichier Texte...

maintenant le point clé, choisissez MacIntosh comme Origine du fichier (Ce devrait être le premier choix).

Ceci utilise Excel 2011 (version 14.4.2)

*Il y a un petit menu déroulant en bas de la fenêtre

0
répondu Gazzer 2014-08-29 05:33:58

résoudre ce en utilisant java (UTF-16LE avec BOM ):

String csvReportStr = getCsvReport();
byte[] data = Charset.forName("UTF-16LE").encode(csvReportStr)
    .put(0, (byte) 0xFF)
    .put(1, (byte) 0xFE)
    .array();

notez que le fichier CSV doit utiliser TAB comme séparateur. Vous pouvez lire le fichier CSV à la fois sur windows et MAC OS X.

se Référer à: Comment puis-je encoder/décoder UTF-16LE tableaux d'octets avec un BOM?

0
répondu bluearrow 2017-05-23 12:26:17

dans mon cas l'ajout de préambule au dossier a résolu mon problème:

var data = Encoding.UTF8.GetBytes(csv);
var result = Encoding.UTF8.GetPreamble().Concat(data).ToArray();
return File(new MemoryStream(result), "application/octet-stream", "data.csv");
0
répondu razon 2017-09-06 13:22:13