FAQ PythonConsultez toutes les FAQ

Nombre d'auteurs : 15, nombre de questions : 269, dernière mise à jour : 10 septembre 2014  Ajouter une question

 

Cette FAQ a été réalisée à partir des questions posées sur le forum Python complétées par d'autres questions qui pouvaient nous sembler intéressantes de traiter. Toutefois il se peut que les réponses apportées contiennent des erreurs, imprécisions ... Vous pouvez dans ce cas contacter un des membres de la rédaction pour lui faire part de vos remarques.

L'équipe Python de Developpez.


SommaireType de donnéesLes chaînes de caractèresLes chaînes Unicode (5)
précédent sommaire suivant
 

Les chaînes normales décrites par le type str sont des chaînes d'octets qui peuvent être interprétées en connaissant leur encodage. Ils en existent de nombreux comme l'ascii (7 bits) qui est l'encodage par défaut de Python, ISO-8859-1 (ou latin_1 sur 8 bits) pour les langues occidentales, utf-8, utf-16, ...
Les chaînes unicode décrites par le type unicode permette de définir tout caractère existant où chaque caractère nécessite plusieurs octets pour être codées (2 octets pour Python qui utilise unicode UCS2). Les chaînes unicode sont reconnaissables par la présence du caractère u devant la chaîne.
Vous pouvez transformer une chaîne normale en chaîne unicode et vice versa.

Mis à jour le 8 février 2007 Guigui_

La méthode isinstance( object, classinfo) renvoie True si l'objet object est une instance de la classe classinfo ou d'une classe dérivée.

Code python :
1
2
a = u'a\xe2' 
print isinstance(a, unicode)  ## True

Mis à jour le 8 février 2007 Guigui_

Si vous avez une chaîne normale dont vous connaissez l'encodage, vous pouvez la transformer en chaîne unicode par la fonction unicode( [object[, encoding [, errors]]])object est la chaîne à convertir et encoding, l'encodage d'interprétation de object. Vous pouvez également utiliser la méthode decode( [encoding[, errors]]) appliquée à un objet de type str

Code python :
1
2
3
strutf8 = '\xc3\xa2\xc3\xa4\xc3\xa0\xc3\xa9\xc3\xa8\xc3\xab\xc3\xaa'  ## chaîne "âäàéèëê" encodée en utf-8 
uni = unicode(strutf8, 'utf-8')  ## uni = u'\xe2\xe4\xe0\xe9\xe8\xeb\xea' 
uni2 = strutf8.decode('utf-8')    ## uni2 = u'\xe2\xe4\xe0\xe9\xe8\xeb\xea'

Si vous utilisiez un autre encodage, vous pourriez obtenir une erreur (unicode(strutf8, 'ascii') génèrera une erreur) ou bien une chaîne unicode ne décrivant par la chaîne spécifiée (unicode(strutf8, 'latin_1') ). Si vous voulez convertir une chaîne de caractères non contenue dans une variable en chaîne unicode, vous pouvez directement le faire en rajoutant en ajoutant le caractère u devant la chaîne

Code python :
uni = u"âäàéèëê" ## u'\xe2\xe4\xe0\xe9\xe8\xeb\xea'

Mis à jour le 8 février 2007 Guigui_

Si vous avez une chaîne unicode, vous pouvez facilement la convertir en chaîne normale sous n'importe quel encodage (capable d'interpréter la chaîne unicode) avec la méthode appliquée à une chaîne unicode encode( [encoding[,errors]])encoding est l'encodage souhaité pour la chaîne normale créée.

Code python :
1
2
a = u'\xe2\xe4\xe0\xe9\xe8\xeb\xea' 
a.encode('utf-8') ## '\xc3\xa2\xc3\xa4\xc3\xa0\xc3\xa9\xc3\xa8\xc3\xab\xc3\xaa'

Mis à jour le 8 février 2007 Guigui_

Les problèmes viennent souvent du fait que l'on définit des chaînes contenant des caractères spéciaux sans que l'on écrive ses caractères spéciaux avec un encodage spécifique (par exemple 'ä' au lieu de '\x84' dans l'encodage cp850). Vous pouvez connaître l'encodage par défaut dans lequel Python encodera vos chaînes contenant des caractères spéciaux par l'attribut sys.stdin.encoding et ainsi facilement la convertir en chaîne unicode.

Code python :
1
2
3
4
import sys 
print sys.stdin.encoding ## cp1252 sous IDLE, cp850 sous la console Python 
machaine = 'äâ'  ## machaine est une chaîne encodée selon l'encodage sys.stdin.encoding 
unicode(machaine, sys.stdin.encoding)  ##  u'\xe4\xe2'
Ainsi la fenêtre interactive d'IDLE utilise l'encodage cp1252, la console interactive Python l'encodage cp850

Mis à jour le 8 février 2007 Guigui_

Proposer une nouvelle réponse sur la FAQ

Ce n'est pas l'endroit pour poser des questions, allez plutôt sur le forum de la rubrique pour ça


Réponse à la question

Liens sous la question
précédent sommaire suivant
 

Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright © 2014 Developpez Developpez LLC. Tous droits réservés Developpez LLC. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.

 
 
 
 
Partenaires

PlanetHoster
Ikoula