Vypísanie UTF8 reťazca na konzolu a presmerovanie do súboru

Narazil som na zaujímavý problém v Pythone. Mám nasledujúci kód, ktorý vypíše utf-8 reťazec:

#!/usr/bin/env python
# -*- coding: utf-8 -*-

name = u'žinčica'
print name

Pri štandardnom spustením dostanem pekne výstup:

$ python zincica.py

žinčica

Keď ale presmerujem výstup do súboru, dostanem nasledujúcu chybu:

$ python zincica.py >/tmp/ostiepok

...
UnicodeEncodeError: 'ascii' codec can't encode character u'\u017e' in position 0: ordinal not in range(128)

Problém spočíva v tom, že stdout má ako kodek na kódovanie výstupu automaticky nastavený ‘ascii’. Riešenie problému je jednoduché, stačí na stdout prestaviť kodek na utf8:

#!/usr/bin/env python
# -*- coding: utf-8 -*-

import codecs
import sys

sys.stdout = codecs.getwriter('utf-8')(sys.stdout)

name = u'žinčica'
print name

Zdroj: http://www.gossamer-threads.com/lists/python/python/701452

No votes yet.
Please wait...
Voting is currently disabled, data maintenance in progress.

December 27, 2008 at 6:49 pm - Software engineering, Uncategorized (Tags: , ).