L'instruction d'impression Python 2.x convertit implicitement le type ʻunicode`` en type
str`` puis l'imprime en standard. Le codage pour la conversion en
ʻunicode->` `str
est déterminé parlocale.getpreferredencoding ()
.
↓ Lorsque j'essaye d'exécuter Python depuis Terminal sur Mac.
>>> import locale
>>> locale.getpreferredencoding()
'UTF-8'
>>> print u'Ah ah'
Ah ah
↓ Lorsque j'essaye d'exécuter Python à partir de l'invite de commande de Windows 7.
>>> import locale
>>> locale.getpreferredencoding()
'cp932'
>>> print u'Ah ah'
Ah ah
↓ Lorsque j'essaye d'exécuter Python depuis la console PyDev d'Eclipse.
>>> import locale
>>> locale.getpreferredencoding()
'US-ASCII'
>>> print u'Ah ah'
Traceback (most recent call last):
File "<input>", line 1, in <module>
UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-2: ordinal not in range(128)
Comme il s'agissait d'ascii dans un environnement spécial, ʻu'Ah '
entraînera une erreur
ʻUnicodeEncodeError``.
Si vous osez spécifier le codage, vous pouvez le faire par la méthode suivante.
>>> import sys, codecs
>>> sys.stdout = codecs.getwriter('utf-8')(sys.stdout)
>>> print u'Ah ah'
Ah ah
Il est très probable que vous masquiez le bogue ...
_ENC_LOCALE = locale.getpreferredencoding()
sys.stdout = codecs.getwriter(_ENC_LOCALE)(sys.stdout, errors='replace')
sys.stderr = codecs.getwriter(_ENC_LOCALE)(sys.stderr, errors='replace')