Estou usando o Python 2.6.5. Meu código requer o uso do sinal "mais que ou igual a". Aqui vai:
>>> 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)`
Por que eu recebo esse erro? Existe uma maneira certa de fazer isso? Eu preciso usar a .format()
função
from __future__ import unicode_literals
no início dos arquivos de origem.unicode
s precisam deunicode
strings de formato.fonte
Um pouco mais de informação sobre por que isso acontece.
funciona porque
print
usa automaticamente a codificação do sistema para o seu ambiente, que provavelmente foi definida como UTF-8. (Você pode verificar fazendoimport sys; print sys.stdout.encoding
)>>> print "{0}".format(s)
falha porque
format
tenta corresponder à codificação do tipo em que é chamado (não consegui encontrar documentação sobre isso, mas esse é o comportamento que notei). Como literais de strings são strings de bytes codificados como ASCII no python 2,format
tenta codificars
como ASCII, o que resulta nessa exceção. Observar:Então é basicamente por isso que essas abordagens funcionam:
fonte