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')