2009-07-07 10 views
0

Après la mise à jour vers PHP 5.3, un de nos systèmes a développé un bug intéressant. Il analyse les fichiers csv et la première étape consiste à montrer à l'utilisateur ce qu'ils ont téléchargé pour le vérifier avant de confirmer.Deux fichiers CSV apparemment identiques, un seul fonctionne

Cependant, nous avons rencontré un bug où certains fichiers sont téléchargés mais ne sont pas lus. La chose étrange est que si nous prenons les données de ces fichiers, copiez et collez-le dans le bloc-notes et enregistrez-le en tant que fichier .csv, il sera très bien téléchargé. Ma première pensée était peut-être quelque chose à faire avec les gens qui créent des fichiers csv à partir d'un programme spécifique? J'ai remarqué que celui qui ne fonctionne pas (même s'il contient les mêmes données) est un peu plus petit que celui que nous copions et collez à partir de celui-ci.

Toute aide grandement appréciée.

Répondre

7

On dirait que l'on a Retour chariot + RetoursLigne et l'autre ne se nourrit Ligne

Soit ça, soit il a un codage différent (ou est-elle retourne poêlier?): ASCII par rapport UTF-16

+0

Merci, maintenant je dois juste l'assainir. – Tjkoopa

1

Est les fichiers CSV dans le même encodage? Peut-être que certains ont la nomenclature UTF-8 au début, ou d'autres sont dans quelque chose comme UTF-16

Ou, il pourrait y avoir une différence dans les caractères de fin de ligne - le mal on pourrait utiliser juste LF, et la bonne CR + LF.

+0

Les ordinateurs utilisent CR, * nix (y compris Mac OS X) utilise LF et Windows utilise CR + LF. Donc, en d'autres termes, vous venez de dire que Linux, Unix et Mac sont mauvais, et Windows est bon. –

0

Si les fichiers semblent identiques, mais sont de tailles différentes, il se peut que les caractères de nouvelle ligne soient différents entre les fichiers.

Vous pouvez ouvrir les fichiers sous une forme d'éditeur de texte autre que le Bloc-notes (par exemple Notepad++) pour confirmer cette

0

Vérifiez l'encodage du fichier. Le bloc-notes enregistre dans le jeu de caractères ANSI par défaut. J'ai remarqué ceci quand Excel analyserait les champs dans un CSV, ANSI, mais pas un autre, UTF8. Dans le fichier UTF8, il s'agissait d'un seul champ, avec des virgules incluses. Seulement quand j'ai sauvé comme ANSI Excel analyserait le CSV. Une chose similaire peut se produire avec PHP. Editer: Si cela s'avère être le cas, vous pouvez implémenter une procédure pour "assainir" les fichiers CSV entrants. En effet, faites en PHP comme vous copiez et collez. Il sera difficile d'insister sur un encodage particulier si vous avez affaire à un téléchargement de fichier à partir du client, cependant, vous devriez être capable de transformer les données entrantes.

Questions connexes