Problem mit Überprüfung auf Umlaute

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
BlackJack

Aber da gibt's doch wieder Unicode-Probleme wenn etwas ausserhalb von ASCII eingegeben wird:

Code: Alles auswählen

In [53]: valid = 'abcäöü'

In [54]: valid.index(u'\xe4')  # Ist ein ä.
---------------------------------------------------------------------------
<type 'exceptions.UnicodeDecodeError'>    Traceback (most recent call last)

/home/bj/<ipython console> in <module>()

<type 'exceptions.UnicodeDecodeError'>: 'ascii' codec can't decode byte 0xc3 in position 3: ordinal not in range(128)
Sowie man mit Zeichen bzw. Buchstaben arbeiten möchte, die nicht im ASCII-Zeichensatz vor kommen, gibt einfach keinen sauberen Weg um Unicode herum.

Weiteres Problem falls die Kodierung des Quelltextes nicht ein Byte pro Zeichen ist, also zum Beispiel UTF-8:

Code: Alles auswählen

In [68]: valid = string.ascii_letters + 'ÄÖÜäöü'

In [69]: zahl = 5

In [70]: [valid[(valid.index(ch) + zahl) % len(valid)] for ch in 'VXZ']
Out[70]: ['\xc3', '\xc3', '\xc3']
Ups, da werden verschiedene Buchstaben auf den gleichen Bytewert abgebildet und lassen sich damit nicht mehr eindeutig dekodieren.
Evil4President
User
Beiträge: 83
Registriert: Dienstag 15. Januar 2008, 15:39
Kontaktdaten:

Vielen Dank BlackJack!
Hatte mal wieder vergessen, vor den Valid-String ein "u" für Unicode zu setzen. Habe das jetzt ergänzt und siehe da, es funktioniert einwandfrei ;-)

Nochmals vielen Dank für eure Hilfe!
Antworten