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

Python UTF-8 print fails when redirecting stdout

Par mle — 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
Lancement d'une formation au Machine Learning Lancement d'une formation au Machine Learning 21/11/2017

Cette formation présente le domaine du Machine Learning, au travers de l'écosystème scientifique ...

Machine Learning : classer automatiquement vos données à l'import Machine Learning : classer automatiquement vos données à l'import 20/03/2018

Comment utiliser des algorithmes de machine learning pour importer correctement des données dans ...

Superset, l'outil de DataViz de AirBnB Superset, l'outil de DataViz de AirBnB 01/03/2018

Superset est un outil développé par AirBnB. Son objectif consiste à faciliter la prise de ...

Scraping & Machine Learning : comment fonctionne un moteur de recherche ? Scraping & Machine Learning : comment fonctionne un moteur de recherche ? 22/01/2018

Ou comment utiliser des composants libres pour faire votre mini-Google (ou Qwant)

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 ...