Re: [python] printy v češtině na WINDOWS/cmd konzoli nečitelné

2010-05-10 Tema obsahu Petr Přikryl

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é

2010-05-04 Tema obsahu Petr Přikryl

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é

2010-05-04 Tema obsahu Petr Přikryl

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é

2010-04-28 Tema obsahu 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 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