Le PEP 263 détaille les problématiques liées à l'encodage de caractères en Python et la directive coding.
Il est possible de récupérer l'encodage par défaut utilisé par le système courant via le module sys:
import sys sys.getdefaultencoding()
Le script s’exécute normalement sous Linux mais affiche une erreur à l’exécution sous Windows. Cela peut se produire si les deux systèmes n'utilisent pas le même jeu de caractère par défaut et que le jeu de caractère n'a pas été précisé via la directive coding en début de fichier:
python mon_script.py File "mon_script.py", line 2 SyntaxError: encoding problem: utf8
Vérifier bien la syntaxe du header, il doit utiliser une des deux formes suivantes:
#!/usr/bin/env python # coding: utf-8
ou bien
#!/usr/bin/env python # -*- coding: utf-8 -*-
Lorsque les scripts utilise l'entête
Lors de l’exécution du script python utilisant en entrée un fichier texte, un message de la forme suivante est retournée par interpréteur:
UnicodeEncodeError: 'charmap' codec can't encode character '\ufeff' in position 54: character maps to <undefined>
Le caractère u'\ufeff ' est le BOM1). Utiliser la syntaxe suivante à l'ouverture du fichier:
with open("data/file.txt", "r", encoding='utf-8-sig') as fp: