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.b...@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
ě š č ř

_______________________________________________
Python mailing list
Python@py.cz
http://www.py.cz/mailman/listinfo/python

Odpovedet emailem