Re: [python] printy v češtině na WINDOWS/cmd konzoli nečitelné
petrofF Problém s Unicode v IDLE: ... print učeské_unicode se zobrazí správně jen pokud je vykonán spuštěním modulu (kde se vyskytuje) Pokud zadám přímo v IDLE-příkazovém interpretu např.: uDia = u'ěščřžýáíéóúůďťňĚŠČŘŽÝÁÍÉÓÚŮĎŤŇ' print uDia výsledek je: ìèøýáíéóúùïòÌÈØÝÁÍÉÓÚÙÏÒ Nevím proč tomu tak je: getdefaultencoding()ascii sys.stdin.encoding cp1250 sys.stdout.encoding cp1250 (platí jak v interaktivním režimu tak i při Run Module) [IDLE version 1.2 Python version 2.5] A zda se s tím nedá něco udělat - konfigurace, nová verze... Můžu potvrdit i pro Python 2.6.5. Odhaduji, že chyba je přímo v konzolovém okně IDLE. Řetězec naklofaný v okně to chybně převádí do Unicode -- pravděpodobně vnitřně používá nějaké jiné kódování. Stálo by za to nahlásit to jako chybu (pokud už to není nahlášené). Přikládám obrázky se sejmutými IDLE konzolemi z 2.6.5 a 3.1.2 P. attachment: py26.pngattachment: py31.png___ Python mailing list Python@py.cz http://www.py.cz/mailman/listinfo/python
Re: [python] printy v češtině na WINDOWS/cmd konzoli nečitelné
zu1234 Hynek Ve wydlích není žádná obdoba *nixových $LC_* proměných, ze kterých by to šlo zjistit za běhu? Zase někdo, kdo chce nás, chudáky windowsáky, nas..t! ... Prostě, ms-windows není systém a už vůbec ne operační. Je to produkt úspěšného marketingu. Ale vážně a k věci: někde na webu jsem potkal informaci že commandlajna pod ms-w nemusí jet v cp852. Že se to dá změnit na cp1250. Ale nezkoušel jsem to - mám se celkem rád! Ale... on to tak Hynek určitě nemyslel. Nezapomínejme na to, že ... až budou Windows hotové, bude to nejlíp dokumentovaný Unix na světě. Fakt je, že u Apple už to tak dopadlo. Ono to zas není tak horké a neustále omílat folklór... Programovat se dá skoro ve všem, i když je to někdy obtížnější, než tvrdit, že to nejde. Zkuste tohle v pythonovském shellu v cmd: import sys sys.stdout.encoding 'cp852' a zkuste totéž v IDLE (používá skutečné windowsovské okno...): IDLE 2.6.5 import sys sys.stdout.encoding 'cp1250' Takže odpověď zní sys.stdout.encoding, případně sys.stderr.encoding. Petr ___ Python mailing list Python@py.cz http://www.py.cz/mailman/listinfo/python
Re: [python] printy v češtině na WINDOWS/cmd konzoli nečitelné
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 uunicode ř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(uZadej 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@py.cz http://www.py.cz/mailman/listinfo/python ___ Python mailing list Python@py.cz http://www.py.cz/mailman/listinfo/python
Re: [python] printy v češtině na WINDOWS/cmd konzoli nečitelné
petrofF Bohužel, toto se týká jen příkazů print. Pokud použiju raw_input(uZadej 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 sem http://www.py.cz/pipermail/python/2005-July/003022.html Jsou tam popsané projevy a možnost částečného řešení. Tenkrát se mi zdálo, že ten řešitel tak trochu strkal hlavu do písku. Šlo to nějak do ztracena. Už jsem to pak nesledoval. Ty odkazy uvnitř už asi nefungují. Jestli máš možnost, přejdi na poslední Python 2.6.x a zkus, jestli už to náhodou není opravené. P. ___ Python mailing list Python@py.cz http://www.py.cz/mailman/listinfo/python