[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