[python] Exec a unicode problem
Jan Fuchs
fuky na sunstel.asu.cas.cz
Čtvrtek Leden 10 15:50:10 CET 2008
Zdravím,
máme skript:
#!/usr/bin/python
# -*- coding: utf-8 -*-
def string2hex(string):
for c in string:
print "%X" % ord(c)
print type(string)
print string
s = u'ž'
command2 = "string2hex(s)"
command3 = unicode("string2hex(u'ž')", 'utf-8')
command4 = "string2hex(unicode('ž', 'utf-8'))"
command5 = "string2hex(u'\u017e')"
command6 = "string2hex(unicode('\xc5\xbe', 'utf-8'))"
command7 = u"string2hex(u'ž')"
command8 = "string2hex(u'\xc5\xbe')" # error
#command8 = "string2hex(u'ž')" # error
exec("string2hex(s)")
exec(command2)
exec(command3)
exec(command4)
exec(command5)
exec(command6)
exec(command7)
exec(command8)
Jeho výstup:
17E
<type 'unicode'>
ž
...
C5
BE
<type 'unicode'>
Traceback (most recent call last):
File "./u.py", line 26, in ?
exec(command8)
File "<string>", line 1, in ?
File "./u.py", line 8, in string2hex
print string
File "/usr/lib/python2.3/encodings/iso8859_2.py", line 18, in encode
return codecs.charmap_encode(input,errors,encoding_map)
UnicodeEncodeError: 'charmap' codec can't encode characters in position 0-1: character maps to <undefined>
Až do command8 = "string2hex(u'\xc5\xbe')" je vše v pořádku, vždy je přesně
specifikováno z čeho do čeho probíhá převod. Ale v tomto případě ne, rozhodnutí
se ponechalo na implicitním nastavení tj. 'ascii' a to je chyba.
String "string2hex(u'\xc5\xbe')" se díky '# -*- coding: utf-8 -*-' správně
interpretuje jako utf-8, ale na jeho část "u'\xc5\xbe'" se už toto nastavení
nevztahuje. Jestli se pletu, tak mě opravte.
S pozdravem Jan Fuchs
http://www.py.cz/PythonUnicodeCestina
09. Jan (Wednesday) v 23:35:00 CET 2008, dmichal na altien.com napsal(a):
> umel by jste mi nekdo vysvetlit proc mi volani exec(script2) hazi
> chybu (UnicodeEncodeError: 'charmap' codec can't encode characters in
> position 0-1: character maps to <undefined>)? A jak to obejit.
>
> #!/usr/bin/python
> #-*- coding: utf8 -*-
>
> script2 = "out(u'žlutý kun')"
--
/**************************************************************
* _ Žádný program není bezchybný, dokonalý ani nejlepší, *
* °v° to samé platí i o lidech a nejen o nich. *
* /(_)\ -- Jan Fuchs -- *
* ^ ^ *
* http://www.fuky.org ICQ: 200692177 *
**************************************************************/
Další informace o konferenci Python