Vous pouvez le faire en ne pas compter sur l'encodage implicite quand les choses d'impression. Ne pas s'en remettre est une bonne idée dans tous les cas - l'encodage implicite n'est utilisé que lors de l'impression sur stdout et quand stdout est connecté à un terminal.
Une meilleure approche consiste à utiliser unicode
partout, et d'utiliser codecs.open
ou codecs.getwriter
partout. Vous enveloppez sys.stdout
dans un objet qui code automatiquement vos chaînes unicode en UTF-8 en utilisant, par exemple:
sys.stdout = codecs.getwriter('utf-8')(sys.stdout)
Cela ne fonctionnera que si vous utilisez unicode partout, cependant. Alors, utilisez unicode partout. Vraiment, partout.
Qu'en est-il de stdin? – duduklein
stdin n'est pas décodé automatiquement, vous devez donc toujours le faire vous-même. Et supposer que l'entrée est UTF-8 est probablement une mauvaise idée, mais il y a 'codecs.getreader ('utf-8') (sys.stdin)' si vous le voulez vraiment. –
Notez que contrairement à Python 2, Python 3 décode automatiquement stdin: http://docs.python.org/3/library/sys.html#sys.stdin - ce comportement peut être modifié comme indiqué dans les documents. –