Vous exportez un tableau. Vous ouvrez le CSV. Au lieu de « José » vous voyez « José ». Au lieu de « € » vous voyez « € ». Au lieu d'un tiret cadratin vous voyez « â€" ».
Bienvenue en enfer de l'encodage.
Ce guide explique pourquoi cela se produit et comment le corriger — que vous exportiez manuellement ou que vous construisiez des outils d'extraction.
Ce Qui Se Passe Réellement
L'encodage de caractères est la façon dont les ordinateurs représentent le texte en octets. Différents encodages utilisent différents motifs d'octets pour le même caractère.
Le coupable le plus courant : de l'UTF-8 interprété comme du Latin-1 (ou vice versa).
L'UTF-8 utilise plusieurs octets pour les caractères non-ASCII. Quand un logiciel lit ces octets comme du Latin-1 (encodage mono-octet), chaque octet devient un caractère erroné distinct.
| Caractère | Octets UTF-8 | Lu en Latin-1 |
|---|---|---|
| é | C3 A9 | é |
| € | E2 82 AC | € |
| — | E2 80 94 | â€" |
| ñ | C3 B1 | ñ |
Le motif est cohérent : les séquences multi-octets deviennent des caractères erronés multiples.
Où l'Encodage Casse
1. La Page Source
Le site web peut déclarer un encodage mais en servir un autre. Ou ne rien déclarer, laissant les navigateurs deviner.
<!-- Déclare UTF-8 -->
<meta charset="UTF-8">
<!-- Mais le serveur envoie -->
Content-Type: text/html; charset=ISO-8859-1
Quand les déclarations sont contradictoires, les navigateurs s'en sortent généralement. Les outils d'export peut-être pas.
2. Le Processus d'Export
Si votre outil d'extraction ne préserve pas l'encodage, les octets sont réinterprétés.
Le textContent de JavaScript retourne des chaînes Unicode, ce qui est sûr. Mais la conversion en fichier nécessite de choisir un encodage. Si ce choix est mauvais, la corruption se produit.
3. L'Application Qui Ouvre le Fichier
Vous exportez un CSV UTF-8 valide. Excel l'ouvre en Latin-1 parce qu'il devine mal. Même corruption, cause différente.
C'est pourquoi le même fichier s'affiche correctement dans une application et est cassé dans une autre.
Comment Diagnostiquer le Problème
Reconnaissance de Motifs
Certaines corruptions sont diagnostiques :
| Vous voyez | L'original était |
|---|---|
| á, é, Ã, ó, ú | á, é, í, ó, ú (accents espagnols) |
| ä, ö, ü | ä, ö, ü (trémas allemands) |
| ç | ç (cédille) |
| € | € (signe Euro) |
| â€" | — (tiret cadratin) |
| ’ | ' (apostrophe typographique) |
Si vous voyez à suivi d'un autre caractère, de l'UTF-8 a été lu comme du Latin-1.
Vérifier les Octets Bruts
En Python :
with open('fichier.csv', 'rb') as f:
print(f.read(100))
Si vous voyez \xc3\xa9 là où vous attendez « é », le fichier est en UTF-8. Si vous voyez \xe9, c'est du Latin-1.
Vérifier Ce Que la Page Déclare
Dans les outils développeur du navigateur :
document.characterSet // Retourne l'encodage réellement utilisé
Corriger les Fichiers Corrompus
L'Astuce du Ré-encodage
Si de l'UTF-8 a été mal lu comme du Latin-1, vous pouvez inverser le processus :
# Lire comme Latin-1 (comme il a été mal interprété)
with open('corrompu.csv', 'r', encoding='latin-1') as f:
text = f.read()
# Encoder en octets Latin-1, puis décoder comme UTF-8
fixed = text.encode('latin-1').decode('utf-8')
with open('corrige.csv', 'w', encoding='utf-8') as f:
f.write(fixed)
Cela ne fonctionne que si la corruption était une simple mauvaise interprétation. La double corruption ou les encodages mixtes sont plus difficiles.
Forcer Excel à Lire l'UTF-8
Excel ignore souvent l'UTF-8. Deux solutions de contournement :
Option 1 : Ajouter un BOM
Un Byte Order Mark au début du fichier signale l'UTF-8 :
with open('fichier.csv', 'w', encoding='utf-8-sig') as f:
f.write(data)
Option 2 : Assistant d'Importation
Au lieu de double-cliquer le CSV, utilisez Données → À partir d'un fichier texte/CSV et spécifiez manuellement l'encodage UTF-8.
Google Sheets comme Intermédiaire
Google Sheets gère l'encodage mieux qu'Excel. Importez-y le CSV, puis exportez en XLSX. Le fichier Excel préservera les caractères correctement.
Prévenir les Problèmes d'Encodage
Si Vous Exportez Manuellement
Utilisez des outils qui gèrent l'encodage correctement. HTML Table Exporter préserve l'Unicode tout au long du processus d'export, évitant les erreurs de conversion qui causent le mojibake.
Pour les exports CSV, si votre outil offre des options d'encodage, choisissez UTF-8 avec BOM pour la compatibilité Excel.
Si Vous Construisez des Outils d'Extraction
Toujours être explicite sur l'encodage :
# Écriture CSV
with open('sortie.csv', 'w', encoding='utf-8', newline='') as f:
writer = csv.writer(f)
writer.writerows(data)
# Lecture HTML
response = requests.get(url)
response.encoding = response.apparent_encoding # Auto-détection
html = response.text
Pour JavaScript/extensions navigateur :
// Blob avec encodage explicite
const blob = new Blob(['\ufeff' + csvContent], {
type: 'text/csv;charset=utf-8;'
});
Le \ufeff est le BOM qui aide Excel.
Si Vous Utilisez Pandas
# Lecture
df = pd.read_csv('fichier.csv', encoding='utf-8')
# Écriture avec BOM pour Excel
df.to_csv('sortie.csv', encoding='utf-8-sig', index=False)
Caractères Spéciaux Qui Posent Problème
Guillemets Typographiques et Apostrophes
Les traitements de texte convertissent les guillemets droits en courbes :
- ' → ' (U+2019)
- " → " " (U+201C, U+201D)
Ceux-ci sont multi-octets en UTF-8 et cassent en Latin-1.
Tirets Cadratins et Semi-cadratins
- — (tiret cadratin, U+2014)
- – (tiret semi-cadratin, U+2013)
Courants dans les données financières et l'édition.
Espaces Insécables
L'espace normal est 0x20. L'espace insécable est 0xA0 (Latin-1) ou 0xC2 0xA0 (UTF-8).
Ceux-ci sont invisibles mais cassent les comparaisons de chaînes et le parsing.
# Normaliser les espaces
text = text.replace('\xa0', ' ')
Symboles Monétaires
€, £, ¥ sont tous en dehors de l'ASCII et s'encodent différemment en UTF-8 vs Latin-1.
Référence Rapide
| Problème | Cause probable | Correctif |
|---|---|---|
| Ã suivi d'un caractère | UTF-8 lu comme Latin-1 | Ré-encoder ou spécifier UTF-8 à l'import |
| ? ou □ remplaçant des caractères | L'encodage ne supporte pas le caractère | Utiliser UTF-8 partout |
| Excel affiche du charabia | Excel a deviné le mauvais encodage | Utiliser le BOM UTF-8 ou l'assistant d'import |
| Caractères invisibles cassant les données | Espaces insécables ou caractères de largeur zéro | Normaliser les espaces |
La Règle Fondamentale
Faire correspondre l'encodage à chaque étape. Exporter en UTF-8. Ouvrir en UTF-8. Sauvegarder en UTF-8.
Dès qu'une étape utilise un encodage différent, les caractères se corrompent.
En cas de doute, l'UTF-8 avec BOM est le choix le plus sûr pour les fichiers qui toucheront Excel.
Pour en savoir plus sur les défis courants d'export de données, consultez notre guide sur l'export de toutes les lignes d'un tableau web paginé.
Vous voulez des exports qui gèrent l'encodage correctement ? En savoir plus sur gauchogrid.com/fr/html-table-exporter ou essayez HTML Table Exporter gratuitement sur le Chrome Web Store.
Top comments (0)