J'utilise Python 2.6.5. Mon code nécessite l'utilisation du signe "supérieur ou égal à". Et voilà:
>>> s = u'\u2265'
>>> print s
>>> ≥
>>> print "{0}".format(s)
Traceback (most recent call last):
File "<input>", line 1, in <module>
UnicodeEncodeError: 'ascii' codec can't encode character u'\u2265'
in position 0: ordinal not in range(128)`
Pourquoi ai-je cette erreur? Y a-t-il une bonne façon de procéder? J'ai besoin d'utiliser la .format()
fonction.
python
string
unicode
python-2.x
Trousse
la source
la source
from __future__ import unicode_literals
au début de vos fichiers source.unicode
s ont besoin deunicode
chaînes de format.la source
Un peu plus d'informations sur pourquoi cela se produit.
fonctionne car
print
utilise automatiquement le codage système de votre environnement, qui était probablement défini sur UTF-8. (Vous pouvez vérifier en faisantimport sys; print sys.stdout.encoding
)>>> print "{0}".format(s)
échoue car il
format
essaie de faire correspondre le codage du type sur lequel il est appelé (je n'ai pas trouvé de documentation à ce sujet, mais c'est le comportement que j'ai remarqué). Étant donné que les littéraux de chaîne sont des chaînes d'octets codées en ASCII en python 2,format
essaie de coders
en ASCII, ce qui entraîne cette exception. Observer:C'est donc essentiellement pourquoi ces approches fonctionnent:
la source