[python] printy v češtině na WINDOWS/cmd konzoli nečitelné
Petr Přikryl
prikryl na atlas.cz
Úterý Květen 4 12:55:27 CEST 2010
Do toho sitecustomize.py bych to necpal. Je to soubor v podstatě
vázaný na počítač. Pokud by aplikace na něco takového spoléhala,
nedala by se rozumně instalovat jinde.
Přimlouvám se o naprostý přechod k Unicode -- jinak s tím bude
problém vždycky. Nebo se musí přinejmenším neunicodový řetězec
převést na Unicode řetězec (v kódování podle zdrojového textu)
a při výstupu určit kódování přes sys.stdout.encoding nebo
sys.stderr.encoding.
Je to furt ten samý problém, že v Python 2.x "takovýhle" řetězec
vlastně není řetězec, ale posloupnost bajtů. Vypořádává se s tím
až Python 3, ale to nebrání tomu v Pythonu 2.x důsledně používat
u"unicode řetězce". Jedině ty jsou řetězci, se kterými se dá
něco dělat z hlediska přenositelnosti.
Petr
petrofF
>Petr Přikryl
>> petrofF
>>
>> >Bohužel, toto se týká jen příkazů print.
>> >Pokud použiju raw_input(u"Zadej jméno...") hodí to chybu
>>
>> Zdá se, že jde o starou chybu, kterou jsem hlásil vývojářům skoro před
>> 5 lety. Mrkni semhttp://www.py.cz/pipermail/python/2005-July/003022.html
>> Jsou tam popsané projevy a možnost částečného řešení.
>
>Zkusil jsem místo explicitního volání:
> raw_input(s.encode(sys.stdout.encoding))
>vytvořit soubor sitecustomize.py s předefinovanými vstupními funkcemi
>
>------------[ sitecustomize.py ]--------------------------------
>
>"""
> - change raw_input() and input() commands if console present
> (i.e. if sys.stdout.encoding is 'cp852')
> - modification of prompt argument proceed only if it is a unicode
>object
> (non-unicode object is treated unchanged)
>"""
>import sys
>if sys.stdout.encoding == "cp852":
> try:
> import __builtin__
> original_raw_input = __builtin__.raw_input
> original_input = __builtin__.input
>
> def raw_input(prompt=''):
> if type(prompt)==unicode:
> prompt = prompt.encode(sys.stdout.encoding)
> return original_raw_input(prompt)
>
> def input(prompt=''):
> return eval(raw_input(prompt))
>
> raw_input.__doc__ = original_raw_input.__doc__
> input.__doc__ = original_input.__doc__
>
> __builtin__.raw_input = raw_input
> __builtin__.input = input
>
> except:
> import traceback; traceback.print_exc()
>
>-------------------------------------------------------------
>Skripty (s unicode literály) se v WinDOS okně zobrazují bezchybně.
>Jen si nejsem jistý jestli je úprava kompatibilní s různými běhovými
>prostředími
>(IDLE, PyWin, PyDev, konzole.py apod)
> -petroff-
>_______________________________________________
>Python mailing list
>Python na py.cz
>http://www.py.cz/mailman/listinfo/python
>
Další informace o konferenci Python