'utf-8' codec can't decode byte

Python Erreur courante

Explication

L'erreur `UnicodeDecodeError: 'utf-8' codec can't decode byte 0x.. in position ..` survient quand vous lisez un fichier (ou des octets) en **UTF-8**, mais que son contenu n'est **pas encodé en UTF-8**. En France, le cas typique est un fichier produit par Windows ou Excel, encodé en **Latin-1 (ISO-8859-1)** ou **Windows-1252 (cp1252)**, contenant des accents. ```python with open("donnees.csv", encoding="utf-8") as f: contenu = f.read() # UnicodeDecodeError: 'utf-8' codec can't decode byte 0xe9 in position 12: invalid continuation byte ``` L'octet `0xe9` correspond à `é` en Latin-1 : le fichier n'est donc pas en UTF-8.

Causes courantes

- **Fichier encodé en Latin-1 / Windows-1252** (fréquent depuis Excel ou un éditeur Windows) lu comme de l'UTF-8. - **Fichier binaire** ouvert en mode texte. - **Encodage non précisé** : Python utilise alors l'encodage par défaut du système, qui varie. - **Caractères accentués** (`é`, `à`, `ç`) dans un fichier non-UTF-8.

1. Précisez le bon encodage

with open("donnees.csv", encoding="latin-1") as f:   # ou "cp1252"
    contenu = f.read()

2. Détectez l'encodage en cas de doute

import chardet
with open("donnees.csv", "rb") as f:
    brut = f.read()
print(chardet.detect(brut))   # {'encoding': 'ISO-8859-1', ...}

3. Tolérez les octets invalides (dernier recours)

with open("donnees.csv", encoding="utf-8", errors="replace") as f:
    contenu = f.read()   # remplace les octets invalides par 

4. En production : convertissez une bonne fois en UTF-8

with open("source.csv", encoding="cp1252") as src, \
     open("propre.csv", "w", encoding="utf-8") as dst:
    dst.write(src.read())

Comment prevenir cette erreur

- **Précisez toujours `encoding=`** lors de l'ouverture d'un fichier texte. - **Standardisez tout en UTF-8** dès l'entrée des données. - Pour les exports Excel français, attendez-vous à du `cp1252` ; avec pandas, `pd.read_csv(..., encoding="cp1252")`. - Référence : [docs.python.org — UnicodeDecodeError](https://docs.python.org/fr/3/library/exceptions.html#UnicodeDecodeError).

Besoin d'aide sur votre projet ?

Besoin d'aide sur un probleme technique ? Decrivez-le pour des recommandations.

Nous contacter

Questions frequentes

Que signifie `byte 0xe9` ?
C'est le code de `é` en Latin-1/Windows-1252. Sa présence indique que le fichier est dans cet encodage et non en UTF-8. Ouvrez-le avec `encoding="latin-1"` ou `encoding="cp1252"`.
`errors="replace"` ou `errors="ignore"`, lequel choisir ?
`ignore` supprime les octets invalides, `replace` les remplace par un caractère de remplacement. Les deux **masquent** le problème : préférez identifier et utiliser le bon encodage. Ne les utilisez que pour des données « sales » irrécupérables.

Erreurs similaires

Chaque semaine, le meilleur de la tech francaise

Tendances, salaires, outils et opportunites — directement dans votre boite mail.

Gratuit. Desabonnement en un clic. Pas de spam.