Comment réparer un fichier CSV corrompu : guide complet avec exemples
Comment réparer un fichier CSV corrompu : guide complet avec exemples
Vous ouvrez un fichier CSV et les colonnes sont décalées, des caractères bizarres apparaissent, ou des lignes entières sont manquantes. Le fichier est corrompu. Avant de demander un nouvel export, essayez ces méthodes de diagnostic et de réparation — elles résolvent 90 % des cas.
Symptômes d'un CSV corrompu
Ouvrez votre fichier dans CSV Viewer pour identifier rapidement le problème :
| Symptôme | Cause probable |
|----------|----------------|
| Colonnes décalées | Guillemet non fermé ou séparateur incohérent |
| Caractères é, è,  | Mauvais encodage (UTF-8 lu comme Latin-1 ou inversement) |
| Lignes fusionnées | Retour à la ligne dans un champ non quoté |
| Symboles  en début de fichier | BOM UTF-8 non géré |
| Données tronquées | Export interrompu ou limite de taille atteinte |
| Colonnes en trop sur certaines lignes | Virgule non échappée dans les données |
Cause n°1 : Guillemets mal fermés
C'est le problème le plus fréquent. Un guillemet ouvrant sans guillemet fermant fait « déborder » un champ sur les lignes suivantes.
Exemple de fichier cassé
nom,description,prix
Widget A,"Un produit utile,19.99
Widget B,"Un autre produit",29.99
Ligne 2 : le guillemet après "Un produit utile n'est jamais fermé. Le parseur considère tout le texte jusqu'au prochain guillemet comme faisant partie du même champ.
Correction
nom,description,prix
Widget A,"Un produit utile",19.99
Widget B,"Un autre produit",29.99
Comment trouver les guillemets cassés
bash
Compter les guillemets par ligne — un nombre impair indique un problème
awk '{n=gsub(/"/, ""); if (n % 2 != 0) print NR": "$0}' fichier.csv
En Python :
python
with open('fichier.csv', encoding='utf-8') as f:
for i, line in enumerate(f, 1):
if line.count('"') % 2 != 0:
print(f"Ligne {i} : nombre impair de guillemets")
print(f" → {line.strip()[:100]}")
Cause n°2 : Problème d'encodage
L'encodage est la deuxième cause la plus fréquente de corruption apparente.
Diagnostic
bash
Détecter l'encodage du fichier
file -bi fichier.csv
Résultat attendu : text/plain; charset=utf-8
En Python avec chardet :
python
import chardet
with open('fichier.csv', 'rb') as f:
result = chardet.detect(f.read(10000))
print(f"Encodage détecté : {result['encoding']} (confiance : {result['confidence']:.0%})")
Conversions courantes
bash
Latin-1 (Windows) → UTF-8
iconv -f WINDOWS-1252 -t UTF-8 fichierlatin.csv > fichierutf8.csv
UTF-8 avec BOM → UTF-8 sans BOM
sed -i '1s/^\xEF\xBB\xBF//' fichier.csv
Tableau des encodages courants
| Encodage source | Symptôme typique | Solution |
|----------------|-----------------|----------|
| Windows-1252 lu comme UTF-8 | é au lieu de é | Convertir de Windows-1252 vers UTF-8 |
| UTF-8 lu comme Latin-1 | é ou ’ | Ouvrir explicitement en UTF-8 |
| UTF-8 avec BOM |  devant le premier en-tête | Supprimer le BOM |
| ISO-8859-1 | Accents cassés dans les noms | Convertir vers UTF-8 |
Cause n°3 : Séparateur incohérent
Le fichier utilise un mélange de virgules et de points-virgules, ou le séparateur ne correspond pas à ce que votre outil attend.
Diagnostic
bash
Compter le nombre de virgules et de points-virgules par ligne
head -5 fichier.csv | awk -F'' '{c=gsub(/,/,""); s=gsub(/;/,""); print "Ligne "NR": , ="c" ; ="s}'
Correction
bash
Remplacer les points-virgules par des virgules
sed 's/;/,/g' fichierfr.csv > fichierstandard.csv
Attention : cette approche simple ne fonctionne que si les champs ne contiennent pas eux-mêmes des points-virgules. Pour un remplacement fiable, utilisez un parseur CSV :
python
import csv
with open('fichier_fr.csv', newline='', encoding='utf-8') as infile:
reader = csv.reader(infile, delimiter=';')
with open('fichier_standard.csv', 'w', newline='', encoding='utf-8') as outfile:
writer = csv.writer(outfile, delimiter=',')
for row in reader:
writer.writerow(row)
Cause n°4 : Retours à la ligne dans les champs
Un champ contenant un retour à la ligne doit être entre guillemets. Sans guillemets, le parseur interprète le retour comme une nouvelle ligne.
Exemple cassé
nom,adresse,ville
Jean Dupont,12 rue de la Paix
Appartement 3,Paris
Correction
nom,adresse,ville
Jean Dupont,"12 rue de la Paix\nAppartement 3",Paris
Détection automatique
python
import csv
with open('fichier.csv', newline='', encoding='utf-8') as f:
reader = csv.reader(f)
header = next(reader)
nb_colonnes = len(header)
for i, row in enumerate(reader, 2):
if len(row) != nb_colonnes:
print(f"Ligne {i} : {len(row)} colonnes au lieu de {nb_colonnes}")
print(f" → {row}")
Cause n°5 : Caractères invisibles
Des caractères de contrôle invisibles (null bytes, caractères de formatage Unicode) peuvent se glisser dans les exports de bases de données.
bash
Supprimer les null bytes
tr -d '\000' < fichier.csv > fichier_clean.csv
Supprimer les caractères non imprimables (sauf retours à la ligne et tabulations)
tr -cd '\011\012\015\040-\176' < fichier.csv > fichier_clean.csv
Normaliser les fins de ligne (Windows → Unix)
sed -i 's/\r$//' fichier.csv
Procédure de réparation étape par étape
Quand vous recevez un CSV qui ne fonctionne pas, suivez cette procédure :
Étape 1 : Inspection visuelle
Ouvrez le fichier dans CSV Viewer. L'outil détecte automatiquement le séparateur et l'encodage. Si les colonnes sont alignées, le fichier n'est probablement pas corrompu — le problème vient de l'outil d'import.
Étape 2 : Vérifier l'encodage
bash
file -bi fichier.csv
Si l'encodage n'est pas UTF-8, convertissez-le.
Étape 3 : Vérifier le nombre de colonnes
bash
awk -F',' '{print NF}' fichier.csv | sort | uniq -c | sort -rn
Toutes les lignes doivent avoir le même nombre de colonnes.
Étape 4 : Chercher les guillemets non fermés
Utilisez le script Python ci-dessus pour trouver les lignes problématiques.
Étape 5 : Nettoyer et re-tester
Après chaque correction, rechargez le fichier dans CSV Viewer pour vérifier le résultat.
Outils utiles
| Outil | Usage |
|-------|-------|
| CSV Viewer | Inspection rapide, détection automatique du séparateur |
| Convertisseur Excel ↔ CSV | Reconvertir un fichier Excel corrompu en CSV propre |
| csvkit (csvclean) | Nettoyage automatique des erreurs courantes |
| iconv | Conversion d'encodage en ligne de commande |
| sed / awk | Corrections de texte rapides |
Prévention
Pour éviter de recevoir des CSV corrompus :
- Spécifiez l'encodage lors de l'export : toujours UTF-8
- Utilisez un vrai parseur CSV (pas
split(',')) pour générer vos fichiers
- Testez l'export en ouvrant le résultat dans CSV Viewer avant de l'envoyer
- Documentez le format : séparateur, encodage, colonnes attendues
- Créez des fichiers de test avec le CSV Creator pour valider votre pipeline d'import
Conclusion
Un CSV corrompu n'est pas une fatalité. Dans la grande majorité des cas, le problème vient des guillemets, de l'encodage ou du séparateur. Avec les bons outils de diagnostic et une procédure systématique, la réparation prend quelques minutes. Et pour éviter le problème en amont, vérifiez toujours vos exports avec un viewer CSV avant de les partager.