[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