[python] Exec a unicode problem

David Michal dmichal na altien.com
Čtvrtek Leden 10 11:54:19 CET 2008


Prave ze to tak neplati uplne. Zkus si spustit tohle:
#!/usr/bin/python
#-*- coding: utf8 -*-

sys.stdout
def out(text):
    print type(text), unicode(text, 'utf8')
   
s = 'Žlutý kůň.'
script1 = "out(s)"
script2 = "out('Žlutý kůň.')"

out(s)
exec(script1)
exec(script2)

exec zrejme kodovani uvedene v hlavicce scriptu nebere v potaz. Skonci to chybou.

Respektive skonci to chybou na vsech systemech, kde:
python -c 'import sys; print sys.stdout.encoding' vrati neco jineho nez UTF-8.

Nakonec pomohlo  pridat radek:
sys.stdout = codecs.getwriter('utf8')(sys.stdout)

Ale pak nesmim pouzivat prikaz print a vsechny retezce musi byt type 'str'.

David

> Nemáte pravdu. To  # -*- coding: utf-8 -*- říká, v jakém kodování je
> uložen samotný program (a tím pádem všechny řetězce, které se v
> programu
> natvrdo objevují). To v jakém kodování bude vstup (tedy různé inputy,
> raw_inputy,), to záleží na konzoli, na které to uživatel píše. Pod
> Windows to je tuším cp852, pod Linuxem dnes snad již všude utf-8.



Další informace o konferenci Python