Logiciels-applications 06.02.2026

Corriger un fichier CSV: caractères spéciaux non interprétés

Julie
mojibake csv: corrigez l'encodage en 1 clic (utf 8)
INDEX +

Votre CSV affiche « é » au lieu de « é » ? Vous n’êtes pas seul. Ce symptôme, appelé mojibake, trahit un problème d’encodage entre la création du fichier et sa lecture. La bonne nouvelle : on le corrige vite en réimportant le fichier avec le bon jeu de caractères ou en le convertissant proprement en UTF-8. Je vous montre comment identifier la cause, réparer sans perdre de données et éviter que ça ne revienne.

Pourquoi les caractères spéciaux déraillent dans un CSV

Un fichier CSV n’est qu’un texte brut avec un délimiteur (virgule, point-virgule ou tabulation) et un encodage. Si l’application qui ouvre le fichier suppose un encodage différent de celui utilisé à l’export, les lettres accentuées se transforment en séquences étranges. Un classique : un fichier en Windows-1252 lu comme UTF-8, ou l’inverse.

Autre piège : les paramètres régionaux. En France, la virgule est séparateur décimal ; beaucoup d’outils exportent alors des CSV au point-virgule. Si vous ouvrez un tel fichier en forçant la virgule, vous mélangez les colonnes. Comprendre ces deux axes (encodage et séparateur) règle 90% des cas.

Règle d’or : alignez encodage et séparateur entre la source et l’outil de lecture. Quand vous hésitez, convertissez vers UTF-8 et documentez-le.

Diagnostic express : encodage, séparateur et autres indices utiles

Avant de “réparer”, identifiez précisément le problème. J’ouvre systématiquement le CSV dans un éditeur qui affiche l’encodage (Notepad++, VS Code : “Reopen with Encoding”). Sous Linux/macOS, la commande suivante donne un premier indice :

# Devine l'encodage d'un fichier
file -i fichier.csv
# Optionnel : détection probabiliste
uchardet fichier.csv

Ensuite, je vérifie le séparateur et l’intégrité des guillemets. Avec un échantillon de 20-30 lignes, on repère vite si c’est « ; », « , » ou « t » (tabulation), et si certaines lignes ont des guillemets mal fermés.

Trois autres points à ne pas négliger : la présence d’un BOM (marque d’ordre des octets) en tête de fichier, la fin de ligne (CRLF vs LF) et la forme Unicode (NFC/NFD sur macOS peut décomposer les accents). Ce sont des détails… jusqu’au jour où ils vous bloquent une importation.

Corriger dans Excel, LibreOffice, Python ou en ligne de commande

Je privilégie d’abord la réimportation propre dans l’outil cible. Dans Excel (Windows/macOS) : Données > À partir du texte/CSV > choisissez l’origine du fichier (65001 : UTF-8, ISO-8859-1, Windows-1252…) et le délimiteur. La prévisualisation vous montre immédiatement si les accents et les colonnes sont corrects. Si l’affichage est bon, validez et enregistrez au format “CSV UTF-8”.

LibreOffice Calc est souvent plus tolérant : Fichier > Ouvrir > cochez “Détecter le séparateur”, puis forcez l’encodage. Vous pouvez ensuite réexporter en UTF-8.

En Python avec pandas, on lit, corrige et réécrit de manière fiable :

import pandas as pd

# 1) Lecture en forçant l'encodage et le séparateur
df = pd.read_csv(
    "fichier.csv",
    encoding="latin-1",          # ou "cp1252", "utf-8"
    sep=";",                     # ou ",", "t"
    encoding_errors="replace",   # évite l'arrêt sur caractère illégal
    on_bad_lines="skip",         # ignore lignes mal formées
    engine="python"              # plus permissif si besoin
)

# 2) (Optionnel) Normaliser les accents en forme NFC
import unicodedata
df = df.applymap(lambda s: unicodedata.normalize("NFC", s) if isinstance(s, str) else s)

# 3) Réécrire un CSV propre en UTF-8 (sans BOM par défaut)
df.to_csv("fichier_corrige.csv", index=False, encoding="utf-8")

En ligne de commande, iconv reste la solution la plus simple pour une conversion directe :

# Convertir de Windows-1252 vers UTF-8
iconv -f WINDOWS-1252 -t UTF-8 fichier.csv > fichier_utf8.csv

# Convertir de ISO-8859-1 (Latin-1) vers UTF-8
iconv -f ISO-8859-1 -t UTF-8 fichier.csv > fichier_utf8.csv

Sur Windows, PowerShell fait le job sans outils tiers :

# PowerShell 5.1 : UTF-8 avec BOM (idéal pour Excel)
Get-Content .fichier.csv | Set-Content -Encoding UTF8 .fichier_utf8_bom.csv

# PowerShell 7+ : explicite sans / avec BOM
Get-Content .fichier.csv | Set-Content -Encoding utf8NoBOM .fichier_utf8.csv
Get-Content .fichier.csv | Set-Content -Encoding utf8BOM   .fichier_utf8_bom.csv

Astuce annexe : si les retours à la ligne posent souci, harmonisez-les avant import :

# Unix -> Windows
unix2dos fichier.csv
# Windows -> Unix
dos2unix fichier.csv

Quel encodage choisir ? Ce tableau vous guide

La compatibilité varie selon les outils. Voici un repère rapide pour choisir l’encodage qui vous évitera des surprises.

Encodage Origine/Contexte Couverture des caractères Excel (Windows) Usage recommandé
UTF-8 (sans BOM) Standard web, interop Unicode complet Parfois mal détecté Échanges machine-à-machine, ETL, APIs
UTF-8 avec BOM Variante UTF-8 Unicode complet Bien détecté Ouverture fiable dans Excel, partage non-tech
Windows-1252 Windows historique Europe de l’Ouest Très bien détecté Lecture d’archives anciennes
ISO-8859-1 (Latin-1) Ancien standard Latin de base Correct Compatibilité minimale
UTF-16 LE Export Excel “Texte Unicode” Unicode complet OK À éviter pour CSV (poids/interop)

Cas complexes : champs multi-lignes, guillemets brisés, NFD/NFC

Certains CSV combinent plusieurs pièges : descriptions sur plusieurs lignes, délimiteurs variables, guillemets manquants. Dans ce cas, je bascule sur un parsing plus tolérant (pandas avec engine="python") et je nettoie par étapes plutôt que d’insister sur un import “magique”.

Exemple de lecture robuste avec contrôle fin :

import pandas as pd, csv

df = pd.read_csv(
    "fichier.csv",
    encoding="cp1252",
    sep=";",
    quotechar='"',
    doublequote=True,
    escapechar="",
    lineterminator=None,   # auto
    engine="python",
    on_bad_lines="warn"
)

Sur macOS, si vous voyez des combinaisons d’accent “é” décomposé, normalisez en NFC pour éviter les égalités texte qui échouent silencieusement. En shell (icu) :

# Normaliser tout le fichier en NFC
uconv -x any-nfc < fichier.csv > fichier_nfc.csv

Pour des jeux de données volumineux et hétérogènes, j’apprécie OpenRefine : détection, transformations en lot, et export en UTF-8 propre. C’est le couteau suisse quand le CSV mélange encodages et formats.

Mini check-list avant de valider votre CSV

  • Les accents s’affichent bien (pas de mojibake), l’encodage est documenté.
  • Le séparateur est correct pour vos paramètres régionaux (virgule vs point-virgule).
  • Les champs contenant des virgules/points-virgules sont entre guillemets.
  • Les fins de ligne sont homogènes (LF ou CRLF), pas de guillemets brisés.
  • Si la cible est Excel, privilégiez UTF-8 avec BOM.

Bonnes pratiques pour ne plus revivre ce problème

Standardisez vos exports en UTF-8 et fixez un contrat d’échange explicite : encodage, séparateur, guillemets, fin de ligne. Côté tooling, paramétrez vos scripts pour qu’ils imposent ces choix et les affichent en en-tête d’email ou dans la documentation du flux.

Deux recettes qui m’ont épargné des heures :

1) Quand le destinataire est technique (ETL, data warehouse), j’envoie un CSV UTF-8 sans BOM, séparateur explicite, et un fichier README indiquant ces paramètres. 2) Quand le destinataire ouvre dans Excel, je fournis un CSV UTF-8 avec BOM et j’utilise le point-virgule pour les locales francophones afin d’éviter la collision avec la virgule décimale.

Enfin, testez toujours l’import dans l’outil cible sur un échantillon réel. Un “oui, ça marche chez moi” ne vaut rien face à une locale système ou une version Excel différente.

Le mot de la fin

Réparer un CSV “cassé” n’est pas une loterie. Avec un diagnostic simple (encodage + séparateur), des conversions maîtrisées (iconv, pandas, PowerShell) et quelques garde-fous (BOM, normalisation NFC), vous reprenez le contrôle. Prenez l’habitude de produire des fichiers propres en UTF-8, de documenter clairement vos choix et d’anticiper l’ouverture dans Excel quand c’est le cas. Vos prochains imports seront sans surprise — et vos accents, impeccables.

weTradeLocal.io – Tous droits réservés.