[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