Seite 1 von 1

Replace mit Umlauten

Verfasst: Mittwoch 28. März 2018, 09:03
von BarneyG77
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

Re: Replace mit Umlauten

Verfasst: Mittwoch 28. März 2018, 09:09
von Sirius3
Welche Python-Version? Woher kommt empName und welches Encoding hat er? Funktioniert das `upper`?

Re: Replace mit Umlauten

Verfasst: Mittwoch 28. März 2018, 09:12
von /me
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.

Re: Replace mit Umlauten

Verfasst: Mittwoch 28. März 2018, 09:43
von BarneyG77
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

Re: Replace mit Umlauten

Verfasst: Mittwoch 28. März 2018, 10:36
von Sirius3
Dann gib mal

Code: Alles auswählen

print(repr(empName), repr('Ä'))
aus. Werden dort die Umlaute richtig als ein Zeichen ausgegeben?

Re: Replace mit Umlauten

Verfasst: Mittwoch 28. März 2018, 12:21
von BarneyG77
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

Re: Replace mit Umlauten

Verfasst: Mittwoch 28. März 2018, 12:28
von /me
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?

Re: Replace mit Umlauten

Verfasst: Mittwoch 28. März 2018, 12:38
von BarneyG77
Die Zeile mit der Coding-Anweisung war schuld ;-)
Läuft jetzt Danke!

Re: Replace mit Umlauten

Verfasst: Mittwoch 28. März 2018, 14:10
von Sirius3
@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.

Re: Replace mit Umlauten

Verfasst: Mittwoch 28. März 2018, 15:14
von BarneyG77
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 :-)