Afficher / Travailler avec les accents sous python

Published: 09 septembre 2014

DMCA.com Protection Status

Avec python, il peut s'avérer dans un premier temps difficile de travailler avec des strings contenant des accents mais une fois qu'on comprend ce qu'est l'encodage tout devient plus facile !. Il est donc vivement conseillé de lire tout d'abord le document suivant: Unicode HOWTO. Noter également que python version 2 et 3 ne traitent pas les strings de la même manière (sous python 3 les strings sont par défaut de type unicode). Exemple simple de manipulations des strings et de l'encodage sous python 2:

>>> s = "Plébiscité sur la toile"
>>> s
'Pl\xc3\xa9biscit\xc3\xa9 sur la toile'
>>> print s
Plébiscité sur la toile
>>> type(s)
<type 'str'>

Attention à la différence entre "print s" et "s" !. Pour changer l'encodage (par exemple utf-8) du string s vous pouvez utiliser la méthode suivante:

>>> s = "Plébiscité sur la toile".encode('utf-8')
 Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
 UnicodeDecodeError: 'ascii' codec can't decode byte 0xc3 in position 2:  ordinal not in range(128)

qui retourne ici une erreur car on ne peut pas changer l'encodage d'une variable de type string. Il faut donc au préalable que le string soit de type unicode. Pour cela il suffit de rajouter un 'u' devant la déclaration de celui-ci:

 >>> s = u"Plébiscité sur la toile"
 >>> type(s)
 <type 'unicode'>
 >>> s = u"Plébiscité sur la toile".encode('utf-8')
 >>> s
'Pl\xc3\xa9biscit\xc3\xa9 sur la toile'
 >>> type(s)
 <type 'str'>

marche aussi en passant par la fonction unicode:

  >>> s = "Plébiscité sur la toile"
  >>> type(s)
  <type 'str'>
  >>> s = unicode(s,'utf-8')
  >>> s
  u'Pl\xe9biscit\xe9 sur la toile'
  >>> type(s)
  <type 'unicode'>

Attention: Si vous travaillez sur un script en python il faut ajouter sur la première ligne de votre script la ligne suivante:

# -*- coding: utf-8 -*-

sinon vous allez obtenir l'erreur suivante:

#SyntaxError: Non-ASCII character '\x96' in file MyFile.py on line XX, but no encoding declared; see http://www.python.org/peps/pep-0263.html for details

Recherches associées