[python] unicode a regulární výrazy
Petr Prikryl
PrikrylP na skil.cz
Pátek Říjen 27 07:21:27 CEST 2006
superman
> > #!/usr/bin/env python
> > # -*- coding: utf-8 -*-
> >
> > nepomuze?
>
> Tak bohužel to dělá to samé, akorát ještě hlásí:
>
> Traceback (most recent call last):
> File "C:\home\astrol\astrology_angle.py", line 28, in ?
> print __AstrologyAngleRegExp
> File "C:\Python24\lib\encodings\cp852.py", line 18, in encode
> return codecs.charmap_encode(input,errors,encoding_map)
> UnicodeEncodeError: 'charmap' codec can't encode character
> u'\u2648' in
> position
> 4: character maps to <undefined>
>
> To znamená, že se stejně všechno pokouší překládat pomocí
> cp852. A můžu do condign dávat co chci. Není to nějaká
> chyba interpreteru na windows?
Odhaduji, že tentokrát to nemá nic společného s regulárním
výrazem ale prostě s tiskem unicodového řetězce. Nedíval
jsem se do tabulky, ale cp852 asi nedefinuje znak pro stupeň.
Předpokládám, že skript spouštíš v "dosovém" okně
(windowsovská console), kde se právě používá kódování
cp852. Příkaz print je implementován tak, že se snaží
při tisku na konzoli unicodový řetězec převést na
řetězec v konzolovém kódování. Zkus tento ilustrační
příklad (v dosovém okně):
>>> s = u'\u2648'
>>> print s
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "c:\Python25\lib\encodings\cp852.py", line 12, in encode
return codecs.charmap_encode(input,errors,encoding_map)
UnicodeEncodeError: 'charmap' codec can't encode character u'\u2648'
in position 0: character maps to <undefined>
>>> print repr(s)
u'\u2648'
Je to ono, že? (Zkoušel jsem to v Python 2.5.)
pepr
Další informace o konferenci Python