Replace mit Umlauten

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.
Antworten
BarneyG77
User
Beiträge: 9
Registriert: Mittwoch 28. März 2018, 08:55

Hallo zusammen,
ich arbeite mich gerade in Python als meine "Alltags"-Skriptsprache ein.
Momentan will ich ein Powershell-Skript gegen ein Python-Skript tauschen. Es funktioniert soweit auch alles nur wenn Umlaute ins Spiel kommen werden diese nicht umgewandelt. Beteffende Codezeile sehen wie folgt aus:

Code: Alles auswählen

empName = empName.upper()
empName = empName.replace(',', ' ')
empName = empName.replace('Ä', 'AE')
empName = empName.replace('Ö', 'OE')
empName = empName.replace('Ü', 'UE')
empName = empName.split(' ')
Das ersetzen von "," und der Split zum Schluß funktionieren, nur die Umlaute bleiben bestehen. Wo liegt hier mein Fehler?

Markus
Sirius3
User
Beiträge: 18266
Registriert: Sonntag 21. Oktober 2012, 17:20

Welche Python-Version? Woher kommt empName und welches Encoding hat er? Funktioniert das `upper`?
Benutzeravatar
/me
User
Beiträge: 3561
Registriert: Donnerstag 25. Juni 2009, 14:40
Wohnort: Bonn

Vermutlich sehen die Umlaute in deinen Daten nicht so aus wie du glaubst. Welche Version von Python verwendest du denn? 2.x oder 3.x?

Gib vor dem replace doch mal folgendes aus: type(empName) und repr(tempName). Anhand der Daten kann man mehr sagen.
BarneyG77
User
Beiträge: 9
Registriert: Mittwoch 28. März 2018, 08:55

Danke für Eure schnellen Antworten.
- als Version kommt 3.6.2 zum Einsatz
- upper() funktioniert.
- type(empName) liefert <class 'str'>
- repr(empName) liefert 'NACHNAME VORNAME'
- als Coding steht # -*- coding: iso-8859-1 -*- in der ersten Zeile

empName liefert ein varchar Feld aus einer Oracle-Datenbank. Der Name wird korrekt zurück geliefert und wie gesagt upper() und split() funktionieren auch nur eben Replace nicht.

Markus
Sirius3
User
Beiträge: 18266
Registriert: Sonntag 21. Oktober 2012, 17:20

Dann gib mal

Code: Alles auswählen

print(repr(empName), repr('Ä'))
aus. Werden dort die Umlaute richtig als ein Zeichen ausgegeben?
BarneyG77
User
Beiträge: 9
Registriert: Mittwoch 28. März 2018, 08:55

Deine Anweisung gibt folgendes aus:
'ÖXXÜXX XXXXXX' 'Ã\x84'
Das "Ä" wird wohl anderst interpretiert.
empName = empName.replace(u'Ä', u'AE') hatte ich auch schon Erfolglos getestet
Benutzeravatar
/me
User
Beiträge: 3561
Registriert: Donnerstag 25. Juni 2009, 14:40
Wohnort: Bonn

Ist am Anfang des Codes irgendein Source Code Encoding gesetzt worden? Oder ist keins gesetzt worden, die Datei dann aber nicht im Encoding UTF-8 abgespeichert?
BarneyG77
User
Beiträge: 9
Registriert: Mittwoch 28. März 2018, 08:55

Die Zeile mit der Coding-Anweisung war schuld ;-)
Läuft jetzt Danke!
Sirius3
User
Beiträge: 18266
Registriert: Sonntag 21. Oktober 2012, 17:20

@BarneyG77: Du hast behauptet, die Python-Datei wäre iso-8859-1-codiert, in Wirklichkeit war sie aber UTF8. Durch löschen der Zeile benutzt Du den Default: UTF-8.
BarneyG77
User
Beiträge: 9
Registriert: Mittwoch 28. März 2018, 08:55

Ok. Danke.
Ich hatte das ganz am Anfang mal eingefügt da sonst Umlaute in der CMD-Konsole Probleme gemacht hatten.
Ab jetzt steht dann UTF-8 in der Zeile :-)
Antworten