193 votes

Microsoft Excel mangles signes diacritiques en fichiers .csv ?

Je suis par programmation de l'exportation de données (à l'aide de PHP 5.2) dans une .csv fichier de test.
Exemple de données: Numéro 1 (note the accented e). Les données sont utf-8 (n préfixé BOM)

Quand j'ouvre ce fichier dans MS excel s'affiche en tant que Numéro 1

Je suis en mesure d'ouvrir ce dans un éditeur de texte UltraEdit) qui affiche correctement. UE signale le caractère decimal 233.

Comment puis-je exporter les données de texte dans une .fichier csv afin que MS excel correctement le rendre, de préférence sans forcer l'utilisation de l'assistant d'importation, ou non-par défaut des paramètres de l'assistant?

252voto

James Baker Points 2936

Un correctement formaté UTF8 fichier peut avoir une Marque d'Ordre d'Octet que ses trois premiers octets. Ce sont les valeurs hexadécimales 0xEF, 0xBB, 0xBF. Ces octets servent à marquer le fichier comme UTF8 (car ils ne sont pas pertinents que "l'ordre des octets d'information").1 Si cette NOMENCLATURE n'existe pas, le consommateur/lecteur de déduire le type d'encodage du texte. Les lecteurs qui ne sont pas de l'utf-8 sera capable de lire les octets comme un autre encodage tels que Windows-1252 et d'afficher les caractères  au début du fichier.

Il y a un bug connu où Excel, lors de l'ouverture d'une UTF8 fichiers csv via l'association de fichier, suppose qu'ils sont dans un seul octet codant, ignorant la présence de la BOM UTF8. Cela peut ne pas être fixe par un système de page de codes par défaut ou le paramètre de langue. La NOMENCLATURE ne sera pas la moindre idée dans Excel - il juste ne fonctionnera pas. (Une minorité rapport affirme que la NOMENCLATURE déclenche parfois la "Importation de Texte" de l'assistant.) Ce bug semble exister dans Excel 2003 et versions antérieures. La plupart des rapports (parmi les réponses ici) dire que c'est corrigé dans Excel 2007 et plus récents.

Notez que vous pouvez toujours* ouvrir correctement UTF8 cdv fichiers dans Excel à l'aide de la "Importation de Texte" assistant qui vous permet de spécifier l'encodage du fichier en cours d'ouverture. Bien sûr, c'est beaucoup moins pratique.

Les lecteurs de cette réponse sont les plus susceptibles dans une situation où ils ne sont pas particulièrement le soutien Excel < 2007, mais l'envoi de raw UTF8 texte Excel, qui se méprend sur le sens et l'aspersion votre texte avec à et d'autres semblables, Windows-1252 caractères. L'ajout de la BOM UTF8 est probablement votre meilleur et le plus rapide pour corriger.

Si vous êtes coincé avec les utilisateurs sur les anciens Excelle, et Excel est le seul consommateur de votre CSVs, vous pouvez contourner ce problème en exportant UTF16 au lieu de UTF-8. Excel 2000 et 2003, double-cliquez-ouvrir correctement. (Certains autres éditeurs de texte peut avoir des problèmes avec UTF16, de sorte que vous pouvez avoir à peser vos options avec soin.)


* Sauf quand vous ne pouvez pas, (au moins) de Excel 2011 pour Mac Assistant d'Importation ne fait pas toujours travailler avec tous les encodages, indépendamment de ce que vous lui dites. </anecdotiques preuve> :)

32voto

oniryx Points 191

Voici le code PHP que j’utilise dans mon projet lors de l’envoi de Microsoft Excel pour l’utilisateur :

Mise à jour : Amélioration de nom de fichier et la correction d’un BUG corriger le calcul de la longueur. Merci à TRiG et @ivanhoe011

15voto

Lire ce post si vous voulez connaître la réponse à toutes les combinaisons de versions d'Excel et des fichiers. La plupart des autres réponses ici concernent leur version Excel uniquement et ne sera pas nécessairement vous aider, parce que leur réponse pourrait ne pas être vrai pour vous.

L'ajout de la NOMENCLATURE caractère introduit des problèmes avec automatique de séparateur de colonne de reconnaissance, mais pas avec toutes les version d'Excel.

Il y a 3 variables qui détermine si elle fonctionne dans la plupart des versions d'Excel. L'encodage, la NOMENCLATURE personnage présence, le séparateur de cellules.

Quelqu'un stoïque à SAP essayé toutes les combinaisons et informé du résultat. Résultat final? Utilisation UTF16le avec la NOMENCLATURE et le caractère de tabulation comme séparateur pour qu'il fonctionne dans la plupart des versions d'Excel.

Vous ne me croyez pas? Je ne voudrais pas non plus, mais lire ici et pleurer: http://wiki.sdn.sap.com/wiki/display/ABAP/CSV+tests+de+encodage+et+colonne+séparateur

10voto

daniels Points 6542

sélectionnez UTF-8 enconding lors de l’importation. Si vous utilisez Office 2007 C’est où vous le choisissiez : tout de suite après vous ouvrez le fichier.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X