[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