Table des matières

, , , , ,

Jeux de caractères et encodage avec python

Le PEP 263 détaille les problématiques liées à l'encodage de caractères en Python et la directive coding.

Encodage par défaut

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()

Erreur à l’exécution d'un script utf-8 sous Windows

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

Erreur

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:

Références

1)
Byte Order Mark