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.
Antworten
Tartaruga
User
Beiträge: 7
Registriert: Dienstag 12. Februar 2008, 15:38

Liebes Python Forum.

Ich habe im Forum schon gesucht aber leider nichts gefunden. Ich hab folgendes Problem.
Eine Funktion ließt einen String aus. So weit so gut nur wenn der String einen Umlaut beinhaltet, dann bekomme ich folgende Fehlermeldung wenn ich den string wieder ausgebe:
UnicodeEncodeError 'ascii' codec can't encode character u'xe4' in position 40 ordinal not in range(128)

Dadurch ist mir auch nicht Möglich den Umlaut zu ersetzen weil auch da das Programm abstürtzen würde. Vielleicht kann mir jemand helfen.

Danke
Tartaruga

Code: Alles auswählen

def Fehler_lesen(ERROR):
    if ERROR.Execute()== 0:
        return 'ERROR_1'#auslesen des speichers nicht moeglich
    else:
        errorvalue = ERROR.GetNumberOfErrorDatas()
        errorData = ERROR.GetErrorData(1).GetText()
        errorData.replace(u'ä', 'ae')
        return errorData
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

Tartaruga hat geschrieben: Eine Funktion ließt einen String aus.
Wieso zeigst Du die uns nicht?
UnicodeEncodeError 'ascii' codec can't encode character u'xe4' in position 40 ordinal not in range(128)
Naja, ASCII kennt eben keine Umlaute. Du musst schon ein encoding wählen, welches so etwas darstellen kann, also etwa utf-8 oder iso-8859-1 o.ä.

Code: Alles auswählen

s = u"Hallöle"
print s.encode("utf-8")
Dadurch ist mir auch nicht Möglich den Umlaut zu ersetzen weil auch da das Programm abstürtzen würde. Vielleicht kann mir jemand helfen.
Wieso? Was hat das Ändern mit der Ausgabe zu tun? Bezieht sich das auf den Code, den Du gegeben hast?
Tartaruga
User
Beiträge: 7
Registriert: Dienstag 12. Februar 2008, 15:38

Code: Alles auswählen

errorData = ERROR.GetErrorData(1).GetText() 
gibt einen String zurück.


Code: Alles auswählen

return errorData.encode("utf-8")
hat funktioniert. nur leider schreibt er jetzt ein großes Ä anstatt einem kleinen.

ich wollte mit:

Code: Alles auswählen

errorData.replace(u'ä', 'ae')
den Umlaut ersetzten aber das hat nicht so ganz funktioniert gibt es da vielleicht schon was fertiges.
Was das ändern mit der Ausgabe zu tun hat weiß ich auch nicht. Ich beziehe mich schon auf den Code den ich voher gepostet habe.
Frank aka Ch3ck3r
User
Beiträge: 49
Registriert: Dienstag 13. November 2007, 21:56
Wohnort: Berlin
Kontaktdaten:

Code: Alles auswählen

import sys
sysencoding = sys.stdout.encoding or sys.getfilesystemencoding() 

#------------------------------
return errorData.encode(sysencoding)
probier es mal so
kostenlose TS2-Server für jeweils 31 Tage:
http://www.ts-onlyfree.de
Tartaruga
User
Beiträge: 7
Registriert: Dienstag 12. Februar 2008, 15:38

Frank aka Ch3ck3r hat geschrieben:

Code: Alles auswählen

import sys
sysencoding = sys.stdout.encoding or sys.getfilesystemencoding() 

#------------------------------
return errorData.encode(sysencoding)
so hats leider nicht funktioniert. Aber wenn ich

Code: Alles auswählen

errorData.encode("iso-8859-1")
schreibe dann funktionierts.
Jetzt hab ich aber noch eine Frage:
Funktioniert das .encode("iso-8859-1") nicht mit einer Liste???

Danke
Lg
BlackJack

`errorData` ist nach allem was Du hier gezeigt hast *keine* Zeichenkette, sondern ein Unicode-Objekt!

Man kann Unicode nicht ausgeben, sondern nur Bytes. Also muss man aus dem Unicode-Objekt eine Zeichenkette (also eigentlich Bytekette) machen. Und zwar in einer Kodierung, die der Empfänger der Bytes erwartet. Wenn man das nicht explizit macht, dann verwendet Python die ASCII-Codierung, d.h. alles ausserhalb von ASCII führt zu einem `UnicodeEncodeError`.
Antworten