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
Utilisation de la vision par ordinateur pour redresser des images Utilisation de la vision par ordinateur pour redresser des images 14/05/2019

Dans un module de comparaison d'images, lorsque deux photographies ne sont pas cadrées de la même ...

Bien configurer ses tests Python avec tox et Travis Bien configurer ses tests Python avec tox et Travis 18/03/2019

Le plus difficile dans le développement des tests unitaires c'est souvent de se motiver à écrire ...

Découvrez la formation initiation au Python Scientifique Découvrez la formation initiation au Python Scientifique 24/11/2017

La formation initiation au Python scientifique vous permettra de vous initiez à la programmation ...

Formation Python à Nantes du 10 au 12 décembre Formation Python à Nantes du 10 au 12 décembre 13/11/2018

Vous êtes développeur et maîtrisez déjà un langage de programmation ? Python vous tente et ...

Formation Python initiation à Toulouse du 3 au 5 février Formation Python initiation à Toulouse du 3 au 5 février 02/01/2015

Vous êtes développeur et maîtrisez déjà un langage de programmation ? Python vous tente et ...