[Python-de] CP -> Unicode-Umwandlung
Thomas Rachel
nutznetz-0c1b6768-bfa9-48d5-a470-7603bd3aa915 at spamschutz.glglgl.de
Fr Nov 23 16:34:33 CET 2012
Am 23.11.2012 15:49 schrieb Olе Streicher:
> Hallo,
>
> ich stehe gerade auf dem Schlauch. Ich habe einen Unicode-String mit
> einer falschen Kodierung (vermutlich cp1251; kyrillisch):
>
> s = u'\xc2\xce\xd2 \xd2\xc2\xce\xc9 \xc1\xc8\xcb\xc5\xd2'
>
> Wie bekomme ich die korrigiert?
>
> Ich dachte eigentlich an
>
> s.decode('cp1251', 'ignore')
>
> aber das bringt ein
>
> UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-2: ordinal not in range(128)
>
> Wo ist da mein Denkfehler?
Daß es schon unicode ist, der sich auf den Bereich 0..255 beschränkt.
D.h. du mußt erst nach latin1 kodieren:
sl = s.encode('latin1')
und hast dann den ursprünglichen Bytestring:
sl == '\xc2\xce\xd2 \xd2\xc2\xce\xc9 \xc1\xc8\xcb\xc5\xd2'
Das kannst Du nun so dekodieren, wie Du es für richtig hältst, z. B.
print sl.decode('cp1251', 'ignore')
Das ergibt ВОТ ТВОЙ БИЛЕТ. Google findet da jedenfalls mal was zu (sogar
mit Musikbezug), im Gegensatz zu ТЮв вТЮЩ СШЫХв, was bei print
sl.decode('iso-8859-5') herauskäme...
Thomas
Mehr Informationen über die Mailingliste python-de