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