Nous avons une application Web qui exporte des fichiers CSV contenant des caractères étrangers avec UTF-8, sans nomenclature. Les utilisateurs Windows et Mac obtiennent des caractères inutiles dans Excel. J'ai essayé de convertir en UTF-8 avec BOM; Excel / Win est bien avec cela, Excel / Mac montre du charabia. J'utilise Excel 2003 / Win, Excel 2011 / Mac. Voici tous les encodages que j'ai essayés:
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 une virgule, mais le point-virgule ne change rien.
Y a-t-il un encodage qui fonctionne dans les deux mondes?
mb_convert_encoding($str, "UTF-16LE");
dans mon code d'exportation et poster les résultats ici.Réponses:
Encodages Excel
J'ai trouvé le
WINDOWS-1252
encodage était le moins frustrant lorsqu'il s'agissait d'Excel. Étant donné qu'il s'agit essentiellement d'un jeu de caractères propriétaire de Microsofts, on peut supposer qu'il fonctionnera à la fois sur Mac et sur la version Windows de MS-Excel. Les deux versions comprennent au moins un sélecteur correspondant "Origine du fichier" ou "Codage du fichier" qui lit correctement les données.En fonction de votre système et les outils que vous utilisez, ce codage peut aussi être nommé
CP1252
,ANSI
,Windows (ANSI)
,MS-ANSI
ou tout simplementWindows
, entre autres variations.Cet encodage est un sur-ensemble de
ISO-8859-1
(akaLATIN1
et autres), vous pouvez donc vous rabattre surISO-8859-1
si vous ne pouvez pas l'utiliserWINDOWS-1252
pour une raison quelconque. Sachez qu'ilISO-8859-1
manque certains caractèresWINDOWS-1252
comme indiqué ici:Notez que le signe euro est manquant . Ce tableau se trouve chez Alan Wood .
Conversion
La conversion se fait différemment dans chaque outil et langue. Cependant, supposons que vous ayez un fichier
query_result.csv
dont vous savez qu'il estUTF-8
encodé. Convertissez-le enWINDOWS-1252
utilisanticonv
:la source
WINDOS-1252
, qui sera probablement correctement interprété par Mac et Windows Excel.Pour UTF-16LE avec nomenclature, si vous utilisez des caractères de tabulation comme délimiteurs au lieu de virgules, Excel reconnaîtra les champs. La raison pour laquelle cela fonctionne est qu'Excel finit par utiliser son analyseur Unicode * .txt.
Caveat : si le fichier est modifié dans Excel et enregistré, il sera enregistré au format ASCII délimité par des tabulations. Le problème maintenant est que lorsque vous rouvrez le fichier, Excel suppose qu'il s'agit d'un vrai CSV (avec des virgules), voit que ce n'est pas Unicode, il analyse donc comme délimité par des virgules - et en fera donc un hachage!
Mettre à jour : 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'enregistrement si:
par rapport à:
la source
sep=,
et le codage UTF16LE ont fonctionné pour moi et ne nécessitaient pas de caractère de séparation différent (il restait une virgule). L'ouverture du fichier par double-clic a chargé le fichier correctement, avec des caractères spéciaux et des sauts de ligne dans les cellules intacts. Inconvénient: l'en-sep=,
tête n'est reconnu par aucun programme sauf Excel pour autant que j'ai vu. Mais OpenOffice / LibreOffice ne nécessite de toute façon pas ce hack (les sauts de ligne dans le contenu des cellules fonctionnent très bien, alors que le chargement à partir d'un fichier texte / l'utilisation du texte dans l'assistant de colonnes dans Excel ne gère pas correctement les sauts de ligne dans les cellules).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 trémas et des signes diacritiques, quel que soit l'encodage ou le saut de cercle que vous faites. Je serais heureux d'entendre quelqu'un me dire différent!
la source
Vous n'avez essayé que les CSV séparés par des virgules et des points-virgules. Si vous aviez essayé CSV séparé par des tabulations (également appelé TSV), vous auriez trouvé la réponse:
UTF-16LE avec BOM (marque d'ordre d'octet), séparés par des tabulations
Mais : dans un commentaire, vous mentionnez que TSV n'est pas une option pour vous (je n'ai cependant pas pu trouver cette exigence dans votre question). C'est dommage. Cela signifie souvent que vous autorisez l'édition manuelle des 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. En outre, les éditeurs peuvent être configurés pour afficher un caractère spécial pour marquer les onglets.
Et oui, j'ai essayé cela sur Windows et Mac.
la source
Voici le clincher sur l'importation de CSV encodé en utf8 dans Excel 2011 pour Mac: Microsoft déclare: "Excel pour Mac ne prend actuellement pas en charge UTF-8." Excel pour Mac 2011 et UTF-8
Ouais, chemin à parcourir MS!
la source
La meilleure solution de contournement pour lire des fichiers CSV avec UTF-8 sur Mac consiste à les convertir au format XLSX. J'ai trouvé un script créé par Konrad Foerstner, que j'ai amélioré un peu en ajoutant la prise en charge de différents caractères de délimitation.
Téléchargez le script depuis Github https://github.com/brablc/clit/blob/master/csv2xlsx.py . Pour l' exécuter , vous devez installer un module python openpyxl pour la manipulation de fichiers Excel:
sudo easy_install openpyxl
.la source
Dans mon cas, cela a fonctionné (Mac, Excel 2011, caractères cyrilliques et latins avec diacritiques tchèques):
la source
Il me semble qu'Excel 2011 pour Mac OS n'utilise pas Encoding.GetEncoding ("10000") comme je le pensais et j'ai perdu 2 jours avec mais le même iso que sur Microsoft OS. La meilleure preuve pour cela est de créer un fichier dans Excel 2011 pour MAC avec des caractères spéciaux, de l'enregistrer au format CSV, puis de l'ouvrir dans l'éditeur de texte MAC et les caractères sont brouillés.
Pour moi, cette approche a fonctionné - ce qui signifie que l'exportation csv sur Excel 2011 sur MAC OS contient des caractères spéciaux pour l'Europe de l'Ouest:
la source
UTF-8 sans nomenclature fonctionne actuellement pour moi dans Excel Mac 2011 14.3.2.
UTF-8 + BOM type de travaux, mais BOM rendu comme charabia.
UTF-16 fonctionne si vous importez le fichier et terminez l'assistant, mais pas si vous double-cliquez dessus.
la source
Ce qui suit a fonctionné pour moi sur Excel pour Mac 2011 et Windows Excel 2002:
À l'aide d'iconv sur Mac, convertissez le fichier en UTF-16 Little-Endian + nommez-le * .txt (l'extension .txt force Excel à exécuter l'assistant d'importation de texte):
iconv -f UTF-8 -t UTF-16LE filename.csv >filename_UTF-16LE.csv.txt
Ouvrez le fichier dans Excel et dans l'assistant d'importation de texte, choisissez:
PS L'UTF-16LE créé par iconv a des octets de nomenclature FF FE au début.
PPS Mon fichier csv original a été créé sur un ordinateur Windows 7, au format UTF-8 (avec les octets de nomenclature EF BB BF au début) et utilisait des sauts de ligne CRLF. La virgule était utilisée comme délimiteur de champ et guillemet simple comme qualificatif de texte. Il contenait des lettres ASCII plus différentes lettres latines avec des tildes, un tréma, etc., ainsi que du cyrillique. Tout s'affiche correctement dans Excel pour Win et Mac.
PPPS Versions exactes du logiciel:
* Mac OS X 10.6.8
* Excel pour Mac 2011 v.14.1.3
* Windows Server 2003 SP2
* Windows Excel 2002 v.10.2701.2625
la source
Sur mon Mac OS, Text Wrangler a identifié un fichier CSV créé avec Excel comme ayant un encodage «occidental».
Après quelques recherches sur Google, j'ai créé ce petit script (je ne suis pas sûr de la disponibilité de Windows, peut-être avec Cygwin ?):
$ cat /usr/local/bin/utf8.sh
la source
Dans mon cas, l'ajout d'un préambule au fichier a résolu mon problème:
la source
au lieu de csv, essayez de sortir du HTML avec une extension XLS et un type mime "application / excel". Je sais que cela fonctionnera sous Windows, mais je ne peux pas parler pour MacOS
la source
br
balise), Excel pour Mac ignore le CSS (fonctionne avec Windows)mso-data-placement:same-cell;
Cela fonctionne pour moi
Maintenant, le point clé, choisissez MacIntosh comme origine du fichier (cela devrait être le premier choix).
Cela utilise Excel 2011 (version 14.4.2)
* Il y a un petit menu déroulant en bas de la fenêtre
la source
Résolvez cela en utilisant java (UTF-16LE avec BOM):
Notez que le fichier CSV doit utiliser
TAB
comme séparateur. Vous pouvez lire le fichier CSV à la fois sous Windows et sous MAC OS X.Reportez-vous à: Comment encoder / décoder des tableaux d'octets UTF-16LE avec une nomenclature?
la source