Intermédiaire • Terminal 9 min de lecture 25 janvier 2025

Terminal encoding : comprendre et corriger les problèmes d'encodage du terminal

Accents déformés, symboles bizarres, points d’interrogation, ^M en fin de ligne… Ces symptômes viennent souvent d’un terminal encoding mal configuré. Comprendre comment le terminal interprète les octets, comment la locale influence l’affichage et comment les outils manipulent les fichiers évite la majorité des soucis d’affichage et de parsing.

Qu'est-ce que le terminal encoding ?

C’est l’ensemble des règles qui transforment des octets en caractères visibles dans votre terminal, selon l’encodage, la locale et les capacités de l’émulateur.

Voici les principaux éléments à connaître :

1 Jeux de caractères et encodages courants

Les formats qui définissent la représentation binaire des caractères.

ASCII, ISO-8859-1 (Latin-1), Windows-1252, UTF-8, UTF-16 (LE/BE)

2 Locales et variables d'environnement

Elles indiquent au shell et aux programmes comment encoder et afficher.

LANG=fr_FR.UTF-8, LC_ALL=C, LC_CTYPE=en_US.UTF-8

3 Émulateur de terminal et affichage

Capacités du terminal, police, largeur des glyphes et rendu des symboles.

TERM=xterm-256color, COLORTERM=truecolor
Police compatible Unicode et symboles larges
Gestion des émojis et double-width
Rendu des combinaisons de accents

4 Transport et marques techniques

SSH, tmux, redirections, BOM et fins de ligne influencent le rendu.

SSH SendEnv/AcceptEnv des locales
BOM (U+FEFF) au début des fichiers
CRLF (Windows) vs LF (Unix)
Multiplexeurs: tmux/screen et UTF-8

Problèmes classiques

Mojibake après connexion SSH

La machine distante n’utilise pas UTF-8 et vos locales ne sont pas transmises.

Accents affichés en é, ’, –

Du UTF-8 interprété comme ISO-8859-1/Windows-1252 ou inversement.

^M en fin de ligne

Des fins de ligne Windows (CRLF) affichées dans un terminal Unix (LF).

Scripts et comparaisons qui échouent

Des octets invalides ou un encodage différent brisent les tests et parsers.

Exemple de problème d'encodage :

# Affichage cassé typique (UTF-8 lu comme ISO-8859-1)
attendu = "café"
affiché = "café" # Mauvaise interprétation des octets UTF-8
assert affiché == attendu # ❌ Échec

Symptômes qui doivent vous alerter

🚨 Signaux d'alarme

!
Les accents deviennent é, ’, ou des losanges avec point d’interrogation
!
cat ou less affichent ^M en fin de ligne ou des carrés vides
!
git diff indique des changements illisibles ou “binary files differ”
!
locale renvoie C/POSIX alors que vous attendiez fr_FR.UTF-8
!
Après SSH, l’affichage se dégrade alors qu’en local tout va bien

Comment les détecter

Solution recommandée : Clean ASCII

Clean ASCII met en évidence les caractères non-ASCII, BOM et contrôles qui perturbent l’affichage dans le terminal. Collez un texte ou un log suspect pour identifier rapidement les octets problématiques avant de les afficher ou de les parser.

✅ Détection automatique

Octets invalides, BOM, CR/LF, caractères de contrôle

📊 Analyse utile

Codes Unicode, positions exactes, suggestions de correction

🧹 Nettoyage assisté

Suppression de BOM, normalisation des espaces et retours

💾 Export propre

Téléchargement prêt à afficher en UTF-8

Autres méthodes de détection

Affichage dans l'éditeur

Vérifiez la barre d’état “UTF-8” et convertissez les fichiers si nécessaire
Activez “render whitespace” pour repérer CRLF, BOM et caractères spéciaux

En ligne de commande (Unix)

# Vérifier la locale active
locale | egrep '^(LANG|LC_)'
# Identifier l'encodage supposé d'un fichier
file -i fichier.txt
# Tester la validité UTF-8 (échoue si octets invalides)
iconv -f UTF-8 -t UTF-8 -o /dev/null fichier.txt
# Inspecter les octets
hexdump -C fichier.txt

En code

JavaScript

console.log(process.env.LANG, Intl.DateTimeFormat().resolvedOptions().locale)

Python

import sys; print(sys.stdout.encoding)

Excel / Google Sheets

UNICODE(MID(cellule;position;1))

Corriger et prévenir

🚀 Correction rapide avec Clean ASCII

Avant de toucher à la configuration système, utilisez Clean ASCII pour assainir rapidement vos données texte susceptibles de casser l'affichage du terminal :

Détection d’anomalies et octets non UTF-8
Suppression BOM / normalisation des fins de ligne
Export immédiat prêt pour le terminal

Méthodes techniques avancées

🔧 Normaliser

Forcez UTF-8 partout: LANG, LC_ALL, préférences du terminal
Transmettez vos locales via SSH (SendEnv/AcceptEnv)
Uniformisez les fins de ligne (dos2unix, gitattributes eol=lf)

🧹 Filtrer

Recodez avec iconv: iconv -f ISO-8859-1 -t UTF-8 fichier
Retirez CR: tr -d '\r' ou sed 's/\r$//'
Validez les entrées utilisateurs et logs avant affichage

⚙️ Automatiser

Hooks pre-commit: refuser BOM et octets non UTF-8
CI: exécuter file/iconv pour vérifier encodage des artefacts
Provisioning: imposer UTF-8 sur serveurs (update-locale)

Checklist rapide

Locale en UTF-8 (LANG/LC_ALL) sur toutes les machines
Transmission des locales via SSH activée
Éditeur configuré en UTF-8 par défaut
Fins de ligne uniformes (LF) via gitattributes
Tests empêchant BOM et octets non UTF-8 dans les dépôts
Police du terminal supportant Unicode et symboles larges

Conclusion

Le terminal encoding conditionne chaque caractère affiché. Un environnement cohérent évite la plupart des erreurs et des affichages illisibles.

Unifiez vos locales en UTF-8, contrôlez les fichiers et automatisez les vérifications : vous éliminerez 80% des soucis d’encodage et d’affichage.

Diagnostiquez votre terminal encoding maintenant

Utilisez notre outil pour repérer les octets et marqueurs qui perturbent l’affichage dans votre terminal.

Analyser mon texte