[python] Re: cestina a python
Radovan Garabik
garabik na kassiopeia.juls.savba.sk
Čtvrtek Duben 14 15:15:25 CEST 2005
Pavel Bařina <blade na blade-comp.com> wrote:
> Dobry den,
> omlouvam se za zacatecnicky dotaz. S pythonem teprve zacinam.
> Pochopil jsem ze python umi pracovat s unicode.
>
> #! /usr/bin/env python
> # -*- coding: iso-8859-2 -*-
> print u"Jsem rád, ze jsem te poznal."
>
> Mi funguje bez problemu a ve funkci print je vypis ceskych znaku spravne.
>
ale to len zhodou okolnosti ak je spravne nastavene sys.getdefaultencoding
bezpecne je pouzit print u"Jsem rád, ze jsem te poznal.".encode('iso2')
(a getdefaultencoding sa v python3.0 vraj zrusi)
> Kdyz ale napisu tohle :
>
> #! /usr/bin/env python
> # -*- coding: iso-8859-2 -*-
> odpoved = raw_input(u"Jak se jmenujes?")
> print u"Tak ty se jmenujes %s! Jsem rad, ze jsem te poznal." % odpoved
>
> Pri pouziti funkce raw_input python hlasi chybu :
>
> Traceback (most recent call last):
> File "./otazka.py", line 3, in ?
> odpoved = raw_input(u"Jak se jmenujes?")
> UnicodeEncodeError: 'ascii' codec can't encode character u'\u0161' in
> position 14: ordinal not in range(128)
>
> Netusim proc unicode v tomto pripade nefunguje. Priklad spoustim jako script
> v konsoli v Linuxu. Dekuji moc za nakopnuti spravnym smerem.
asi raw_input sa neriadi nastavenim sys.getdefaultencoding. Dalo by sa
to povazovat za bug alebo design flaw, ale sys.getdefaultencodingje aj
tak depreciated.
Dalsi problem sa prejavi ked clovek rovno zada nieco s diakritikou do
promptu, lebo raw_input nacita iba cistu postupnost bajtov, nevie nic o tom v
akom kodovani by sa mali nachadzat, lebo to je zalezitost terminalu (a
dokonca nemusi ani suvisiet s locale, aj ked nezhoda s locale by sa
prejavila inde)
riesenie je nieco ako:
odpoved = raw_input(u"Jak se jmenujes?".encode('iso2')).decode('iso2')
'iso2' v predchadzajucich pripadoch predpoklada iso2 system,
univerzalnejsie je zistit si nastavenie kodovania z locale, a
predpokladat ze terminal pouziva rovnake:
import locale
default = 'iso2'
iocharsetguess = locale.nl_langinfo(locale.CODESET) or default
a potom pouzivat iocharsetguess, to sice znamena ze bez dalsieho
osetrenia program spadne na nekompatibilnych locales (cize na hocicom
inom okrem utf-8, cp1250, iso2 a mozno nejakych CJK locales)
--
-----------------------------------------------------------
| Radovan Garabík http://kassiopeia.juls.savba.sk/~garabik/ |
| __..--^^^--..__ garabik @ kassiopeia.juls.savba.sk |
-----------------------------------------------------------
Antivirus alert: file .signature infected by signature virus.
Hi! I'm a signature virus! Copy me into your signature file to help me spread!
Další informace o konferenci Python