Seite 1 von 1

die guten alten umlaute

Verfasst: Donnerstag 4. September 2003, 11:16
von Goudaman
Hallo alle:

Ich hab folgendes Problem bei einer Anwendung:
Die Umlaute werden in einem String durch die amerikanischen (also ü wird zu [etc.) getauscht.
Es wird also keine "exeption geraised" (i love anglizismen) aber die zeichen trotzdem nicht korrekt uebergeben.

Die Codierung hab ich in der site.py auf latin-1

Wenn ich per IDLE ein script aufrufe funktionierts tadel los.
Meine Scripte laufen allerdings als Service/ bzw zum debuggen in einem Terminal fenster.

Die maschine ist eine amerikanische mit deutschem betriebssystem (win)

Hat irgendjemand einen Vorschlag was ich versuchen Koennte?

Danke!

Chris

Verfasst: Freitag 5. September 2003, 08:44
von Leonidas
Unicode strings benutzen??
bei mir gehts auch so problemlos.

Verfasst: Freitag 5. September 2003, 10:25
von Gast
hehe...

wuerd ich ja gern.. aber die werden eben nicht richtig angezeigt.

aber ich bin dem problem auf der spur... es wurden bei der app nicht alle/ bzw wohl keine der encodings aus dem encodings ornder geladen... jetzt muss die app so umgebaut werden das sie eben das tut. nur steig ich nicht durch wann oder durch welches script diese encodings eben geladen werden.
Ich war zu ungenau, da sich das Problem an einer App zeigt in die Python integriert ist.

(das es im IDLE funktionierte lag daran das IDLE natuerlich die standard Python pfade benutzt... d'oh!)

also nun die abwandlung meiner Frage:

Was muss im Python lib dll wasimmer ordner sein damit die encodings moeglich sind...?

try:
import locale
print "locale imported"
except:
print "locale not imported"
try:
import codecs
try:
print a.encode('latin-1','ignore')
except:
print "encoding Latin not working"
try:
print a.encode('ascii','ignore')
except:
print "encoding Ascii not working"
try:
print a.encode('cp1252','ignore')
except:
print "encoding cp1252 not working"
except:
print "IMPORT not working"
return 0

die imports funktionieren aber eben nicht das a.encode



THX

Verfasst: Freitag 5. September 2003, 18:43
von Milan
Frage: was ist a? warum steht ganz unten ein return 0? Und, kannst du bitte die [code]...[/code] Tags benutzen, weil bei so vielen try excepts verliert man sonst den Überblick...

hatte das gleiche

Verfasst: Freitag 5. September 2003, 20:38
von rogen
def sonderzeichen(eing):
a = repr(eing)
a = a.replace("\\xe4","")
a = a.replace("\\xfc","")
a = a.replace("\\xf6","")
a = a[1:]
a = a.replace("\'","")
a = str(a)
return a


mit sonderzeichen(string)

kommt der umgew. string raus.

Verfasst: Freitag 5. September 2003, 20:39
von Gast

Code: Alles auswählen


def sonderzeichen(eing):
	a = repr(eing)
	a = a.replace("\\xe4","")
	a = a.replace("\\xfc","")
	a = a.replace("\\xf6","")
	a = a[1:]
	a = a.replace("\'","")		
	a = str(a)
	return a  

entschuldigung

Verfasst: Montag 8. September 2003, 12:25
von Gast
hi milan
hi rogen

danke fuer die antworten:

das a ist nur ein string beispiel, das Return 0 muss ich bei dieser App benutzen damit sie keinen weiteren Code ausfuehrt (die umlaute stehen in einem text string, der per Python ausgelesen und in eine db geschrieben wird) ich versuche mit dem kurzen try/except script eben nur zu debuggen.

ein anderes Beispiel:

Code: Alles auswählen

def someFunc():
    a = u"German special CHARs: äüö ÄÜÖ ß"
    print a.encode('latin-1','ignore')
    return 0
sollte ja eigentlich auch:
German special CHARs: äüö ÄÜÖ ß
rauskommen (wie im IDLE) ... stattdessen kommt bei mir:
German special CHARs: ├ñ├╝├ ├ä├£├û ├ƒ
raus.

rogen:
dein script wuerde doch gleichbedeutend mit a.encode('latin-1','ignore') sein, oder?

das encode funktioniert mittlerweile, muss irgendwo ein import fehler gewesen sein...


Jedenfalls muss es irgendetwas mit der Systemsprache zu tun haben und das defaultdecoding eben auf englisch stehen. was ich aber nicht hinbekomme. wies scheint ;)

thanks for sticking with me!

Verfasst: Montag 8. September 2003, 12:38
von Gast
default encoding eben nicht auf englisch sondern auf deutsch natuerlich.

Verfasst: Montag 8. September 2003, 16:19
von Goudaman
ok habs nochmal anders probiert:

Code: Alles auswählen

def umlaut():
     import locale     
     print "defaultlocale: " + str(locale.getdefaultlocale())
     umlautStr = "\xfc \xc4"
     print "\\xfc encoded: " + umlautStr

     a = "German special CHARs: äüö ÄÜÖ ß"
     a = unicode(a,'latin-1')
     try: 
          print "latin-1: " + str(a.encode('latin-1','replace'))
           
     except:
          print "encoding Latin not working" 
     try: 
          print "ascii:   " + (a.encode('ascii','replace')) 
     except: 
          print "encoding Ascii not working" 
     try: 
          print "cp1252:  " + str(a.encode('cp1252','replace')) 
     except: 
          print "encoding cp1252 not working" 
     return a 
um zu sehen was default is etc..
im IDLE kommt raus:
defaultlocale: ('de_DE', 'cp1252')
\xfc encoded: ü Ä
latin-1: German special CHARs: äüö ÄÜÖ ß
ascii: German special CHARs: ??? ??? ?
cp1252: German special CHARs: äüö ÄÜÖ ß
u'German special CHARs: \xe4\xfc\xf6 \xc4\xdc\xd6 \xdf'
bei mir kommt raus:
defaultlocale: ('de_DE', 'cp1252')
\xfc encoded: ³ ─
latin-1: German special CHARs: ├ñ├╝├ ├ä├£├û ├ƒ
ascii: German special CHARs: ?????? ?????? ??
cp1252: German special CHARs: ├ñ├╝├ ├?├?├? ├?
obwohl alles auf deutsch und cp1252 steht...

ich checks nicht... :cry: