[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