Seite 1 von 1

umlaute speichern

Verfasst: Samstag 7. Februar 2004, 11:29
von rogen
ich habe ein kleines script:

Code: Alles auswählen

from Tkinter import *
import tkFileDialog

class Editor:
    def __init__ (self):
        fenster = Tk()
        self.text = Text(fenster)
        self.text.pack()
        dateim = Menu(fenster)
        dateim.add_command(label="speicher", command =  self.speicher)
        fenster.config(menu=dateim)
        mainloop()
        
    def speicher(self):
        self.datei = tkFileDialog.asksaveasfile()
        if self.datei:
            self.datei.write(self.text.get(1.0,END))
        

editor = Editor()
leider kann ich keine umlaute speichern

Verfasst: Samstag 7. Februar 2004, 12:09
von Milan
Das muss ein Fehler in Tcl/TK sein, Python hat damit nix zu tun. Scheinbar kann kein UNicode zurückgesendet werden (bei get), denn wenn ich von Python aus Umlaute einfüge, kann ich die auch speichern (self.text.insert(END,"\xdc")). Es empfiehlt sich also, mal eine aktuellere version zu installieren (von Tcl/TK). Aber du hast noch einen anderen Fehler in deinem Programm:

ich habe erst einmal gerätselt, warum bei mir gar nichts gespeichert wurde, aber eine Datei da war. Als ich dein Script dann zu gemacht habe, hat er gespeichert --> du vergisst die Datei wieder zu schließen. Alternativ kannst du das ja auch wirklich weglassen, darfst aber nicht das file-Obj speichern, es wird eh beim nächsten speichern-Dialog überschrieben.

Code: Alles auswählen

    def speicher(self): 
        datei = tkFileDialog.asksaveasfile() 
        if datei: 
            datei.write(self.text.get(1.0,END))

Verfasst: Samstag 7. Februar 2004, 13:41
von hans
Milan hat geschrieben:Scheinbar kann kein UNicode zurückgesendet werden (bei get), denn wenn ich von Python aus Umlaute einfüge, kann ich die auch speichern
Kann es sein dass Python mit UTF8 arbeitet während das Betriebssystem standardmäßig ISO 8859-15 verwendet?

Ich hatte ähnliche Probleme bei Verwendung von QT. Vor Verwendung des Strings muss ich diesen konvertieren, dann geht's.

Hans

Verfasst: Samstag 7. Februar 2004, 22:28
von DER Olf
konvertieren??

ich hatte mal ein ähnliches problem (und habs immer noch):
ich kann keine umlaute suchen.

keine schöne lösung

Verfasst: Sonntag 8. Februar 2004, 09:55
von rogen
das löst zwar das problem, ist aber nicht schön

Code: Alles auswählen

from Tkinter import *
import tkFileDialog

def sonderzeichen(eing):
    a = repr(eing)
    a = a.replace("\\xe4","ä")
    a = a.replace("\\xfc","ü")
    a = a.replace("\\xf6","ö")
    a = a.replace("\\xd6","Ö")
    a = a.replace("\\xc4","Ä")
    a = a.replace("\\xdc","Ü")
    a = a[1:]
    a = a.replace("\'","")      
    a = str(a)
    return a  

class Editor:
    def __init__ (self):
        fenster = Tk()
        self.text = Text(fenster)
        self.text.pack()
        dateim = Menu(fenster)
        dateim.add_command(label="speicher", command =  self.speicher)
        dateim.add_command(label="offnen", command =  self.laden)
        
        fenster.config(menu=dateim)
        mainloop()
        
    def speicher(self):
        self.datei = tkFileDialog.asksaveasfile()
        if self.datei:
            print sonderzeichen(self.text.get(1.0,END))
            print "---------------"
            print (self.text.get(1.0,END))
            self.datei.write(sonderzeichen(self.text.get(1.0,END)))
    def laden(self):
        self.datei = tkFileDialog.askopenfile()
        self.text.delete(1.0, END)
        if self.datei:
            zeilen = self.datei.read().split("\\n")
            print zeilen
            print len(zeilen)
            for a in zeilen:
                self.text.insert(END,a + "\n")
            
        
        
editor = Editor()[quote]

[/quote]

Verfasst: Sonntag 8. Februar 2004, 09:55
von rogen
aber zum suchen würde das helfen.

Verfasst: Sonntag 8. Februar 2004, 10:33
von DER Olf
würde denn nicht auch:

Code: Alles auswählen

import sys
sys.getdefaultcoding(Unicode)  #ja...welches encodin nun???? :? 
reichen?
aber welches encoding müsste man setzen? geht auch ASCII? (kenn ich besser aus delphi)

Verfasst: Sonntag 8. Februar 2004, 11:36
von hans
Hi rogen, hab mir mal einen alten Thread rausgesucht. http://python.sandtner.net/viewtopic.ph ... ight=88591 man achte am Ende auf die QT Lösung QString.local8bit !

Vielleicht gibt es soetwas ja auch in TKInter

Hans