[python] Unicode/ne-unicode problem
Jaroslav Lukesh
lukesh na seznam.cz
Středa Květen 2 17:13:50 CEST 2012
Aha, toto by byla cesta. Jenže mě to překóduje cp1250 (tak to jde do
browseru) přes utf8 (tak to jde z browseru), to chytnu a pošlu do browseru
zpět jako cp1250 a ten zmetek co od něj pak dostanu vypadá takhle:
vstup, který projde ttímto mlýnem: 'ě š č ř' a výstup:
>>> a='Ă˝ á Ă Ă.'
>>> a
'\xc3\xbd \xc3\xb7 \xc3\xad \xc3.'
>>> a.encode('raw_unicode_escape').decode('utf-8')
Traceback (most recent call last):
File "<stdin>", line 1, in ?
UnicodeDecodeError: 'ascii' codec can't decode byte 0xc3 in position 0:
ordinal not in range(128)
>>>
tak jsem našel další neobvyklé volby, ale nenapadá mě co s tím:
>>> a.encode('string_escape').decode('utf-8')
u'\\xc3\\xbd \\xc3\\xb7 \\xc3\\xad \\xc3.'
>>> a.encode('unicode_internal').decode('cp1250')
u'\u0102\u02dd \u0102\xb7 \u0102\xad \u0102.'
>>> a.encode('unicode_internal').decode('cp1250').encode('utf8')
'\xc4\x82\xcb\x9d \xc4\x82\xc2\xb7 \xc4\x82\xc2\xad \xc4\x82.'
----- Původní zpráva -----
Od: "Zdeněk Böhm" <zdenek.bohm na seznam.cz>
> Tento problém vzniká, když je text převeden do lokálního kódování dvakrát.
>
> # výchozí text:
>>>> "ě š č ř"
> '\xc4\x9b \xc5\xa1 \xc4\x8d \xc5\x99'
>
> # Tady se text chybně považuje za unicode:
> text = u'\xc4\x9b \xc5\xa1 \xc4\x8d \xc5\x99'.encode("utf8")
>
> # a takovou to pak udělá "paseku":
>>>> text
> '\xc3\x84\xc2\x9b \xc3\x85\xc2\xa1 \xc3\x84\xc2\x8d \xc3\x85\xc2\x99'
>>>> print text
> Ä Å¡ Ä Å
>
> # Takto se to opraví zpět do správného tvaru:
>>>> fixed = text.encode('raw_unicode_escape').decode('utf-8')
>>>> print fixed
> ě š č ř
Další informace o konferenci Python