27. December 2008

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

  • Babel fish

      Translate from:

      Translate to:

  • Where’s the fish?

  • Starfish

  • Fish for you

  • Further info

  • Badges

  • Video channel

  • Learning

    Grow your brain.
  • Tags

  • Topics

  •  

    December 2008
    M T W T F S S
        Jan »
    1234567
    891011121314
    15161718192021
    22232425262728
    293031  
  • Comments