'ascii' codec can't encode character
Python
Erreur courante
Explication
L'erreur `UnicodeEncodeError: 'ascii' codec can't encode character '\xe9' ...` survient quand vous **écrivez ou encodez** du texte contenant des accents (`é`, `à`, `ç`) vers un encodage **ASCII** qui ne sait pas les représenter. Cela arrive en encodant explicitement en ASCII, ou en écrivant vers une sortie (fichier, console) dont l'encodage par défaut est limité.
```python
texte = "café"
octets = texte.encode("ascii")
# UnicodeEncodeError: 'ascii' codec can't encode character '\xe9' in position 3
```
Causes courantes
- **Encodage explicite en ASCII** d'un texte accentué. - **Écriture dans un fichier** sans préciser `encoding="utf-8"`. - **`print` vers une console Windows** configurée en `cp1252`. - **Locale système** ancienne ou mal configurée (serveurs).
1. Encodez (ou écrivez) en UTF-8
octets = "café".encode("utf-8") # ✅
with open("sortie.txt", "w", encoding="utf-8") as f:
f.write("café") # ✅
2. Forcez l'encodage de la sortie standard
import sys
sys.stdout.reconfigure(encoding="utf-8") # Python 3.7+
Ou définissez la variable d'environnement PYTHONUTF8=1 (ou PYTHONIOENCODING=utf-8).
3. Si vous devez vraiment de l'ASCII, retirez les accents
import unicodedata
def sans_accents(s):
return unicodedata.normalize("NFKD", s).encode("ascii", "ignore").decode()
print(sans_accents("café")) # 'cafe'
Comment prevenir cette erreur
- **Écrivez et encodez toujours en UTF-8** : précisez `encoding="utf-8"` partout.
- **Activez `PYTHONUTF8=1`** pour forcer l'UTF-8 par défaut (utile sous Windows et sur les serveurs).
- Référence : [docs.python.org — UnicodeEncodeError](https://docs.python.org/fr/3/library/exceptions.html#UnicodeEncodeError).
Besoin d'aide sur votre projet ?
Besoin d'aide sur un probleme technique ? Decrivez-le pour des recommandations.
Nous contacterQuestions frequentes
Pourquoi ça marche sur ma machine mais pas sur le serveur ?
Parce que l'encodage par défaut diffère (locale système). Précisez explicitement `encoding="utf-8"` à l'écriture, ou activez `PYTHONUTF8=1`, pour un comportement identique partout.
Comment écrire des accents dans la console Windows sans erreur ?
Reconfigurez la sortie : `sys.stdout.reconfigure(encoding="utf-8")`, ou lancez Python avec `PYTHONUTF8=1`. Évitez de compter sur l'encodage par défaut de `cmd.exe`.