Accueil / Blog / Métier / Archives / Python UTF-8 print fails when redirecting stdout

Python UTF-8 print fails when redirecting stdout

Par Mathieu Leplatre publié 26/01/2011

Consider the following piece of code:

# -*- coding: utf-8 -*-
print u"Վարդանաշեն"

Running this in a terminal works:

$ python test.py
Վարդանաշեն

Redirecting standard output to a file fails:

$ python test.py > file
Traceback (most recent call last):
  File "test.py", line 2, in 
    print u"Վարդանաշեն"
UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-9: ordinal not in range(128)

Explanations are available on Python official wiki: default encoding has to be forced.

With an environment variable:

$ PYTHONIOENCODING='utf_8'
$ export PYTHONIOENCODING
$ python test.py > file
$

With source modification:

import sys
import codecs
import locale
sys.stdout = codecs.getwriter(locale.getpreferredencoding())(sys.stdout)
ABONNEZ-VOUS À LA NEWSLETTER !
Voir aussi
Présentation de l'écosystème Python scientifique Présentation de l'écosystème Python scientifique 10/11/2016

Au fil des années Python est devenu un outil du quotidien pour les ingénieurs et chercheurs de ...

Monkey-patching a Python instance method 09/11/2016

Dynamically adding or overwriting an instance method in Python is rarely needed, but it's a good ...

Retour sur PyconFR 2013 05/11/2013

L'édition 2013 de la conférence Python française se tenait à Strasbourg du 26 au 29 Octobre. Je ...

Retour sur PyConFr 2015 Retour sur PyConFr 2015 19/10/2015

Makina Corpus était présent à Pau pour la PyConFr 2015, voici quelques retours à chaud.

Retour sur la PyConFr 2016 Retour sur la PyConFr 2016 18/10/2016

Nous étions présents à Rennes pour PyConFr 2016. Voici notre compte-rendu à chaud.