En Python, tu as les chaines "raw", et les chaîne "unicode".
Pour les chaînes unicode, elles sont stockées directement en représentation 2 ou 4 octets par caractère (ie. pas en utf8 ou autre).
Par contre, pour les exprimer dans le source, comme ceux-ci peuvent avoir différents encodages, tu indiques l'encodage au début du source, par exemple: # -*- encoding: utf-8 -*-
Puis tu déclares les chaînes unicode avec un u"Ma chaîne" (noter le 'u' avant le premier quote). A la compilation en byte-code, Python sait ainsi comment interpréter la chaîne source et la stocker dans le bon format en unicode.
Ensuite, tu manipules naturellement les chaînes unicodes. Par contre, lorsque tu fais des entrées/sorties avec, il faut utiliser les méthodes encode/decode en indiquant l'encodage destination/source (il y a des wrappers, par exemple en utilisant codecs.open(), pour que les transformations soient faites de façon transparentes pour le programmeur).
Le préfixe "u" n'est quand même pas un trop grosse contrainte et a permis de garder la compatibilité avec les codes existants... mais en effet, si tu veux que toutes les chaînes soient Unicode par défaut, il faudra attendre Python 3 (si j'ai bien suivi, les données raw ne seront alors que des buffers d'octets, sans les méthodes de manipulation des chaînes).
Après, le support d'Unicode dans telle ou telle librairie, c'est autre chose. Dans certains cas ça peut demander du boulot ou devenir un casse tête (du genre perte de l'encodage à un moment donné du processus).
Votez les 30 juin et 7 juillet, en connaissance de cause. http://www.pointal.net/VotesDeputesRN
[^] # Re: python et utf-8
Posté par lolop (site web personnel) . En réponse à la dépêche TWiki 4.2. Évalué à 4.
Pour les chaînes unicode, elles sont stockées directement en représentation 2 ou 4 octets par caractère (ie. pas en utf8 ou autre).
Par contre, pour les exprimer dans le source, comme ceux-ci peuvent avoir différents encodages, tu indiques l'encodage au début du source, par exemple:
# -*- encoding: utf-8 -*-Puis tu déclares les chaînes unicode avec un
u"Ma chaîne"(noter le 'u' avant le premier quote). A la compilation en byte-code, Python sait ainsi comment interpréter la chaîne source et la stocker dans le bon format en unicode.Ensuite, tu manipules naturellement les chaînes unicodes. Par contre, lorsque tu fais des entrées/sorties avec, il faut utiliser les méthodes encode/decode en indiquant l'encodage destination/source (il y a des wrappers, par exemple en utilisant codecs.open(), pour que les transformations soient faites de façon transparentes pour le programmeur).
Le préfixe "u" n'est quand même pas un trop grosse contrainte et a permis de garder la compatibilité avec les codes existants... mais en effet, si tu veux que toutes les chaînes soient Unicode par défaut, il faudra attendre Python 3 (si j'ai bien suivi, les données raw ne seront alors que des buffers d'octets, sans les méthodes de manipulation des chaînes).
Après, le support d'Unicode dans telle ou telle librairie, c'est autre chose. Dans certains cas ça peut demander du boulot ou devenir un casse tête (du genre perte de l'encodage à un moment donné du processus).
Votez les 30 juin et 7 juillet, en connaissance de cause. http://www.pointal.net/VotesDeputesRN