[Python-de] Neue Probleme mit Unicode in Text-Widget von Tkinter

M.-A. Lemburg mal at lemburg.com
Wed Apr 25 18:30:12 EDT 2001


CCF.Herzog at gmx.net wrote:
> 
> Hallo,
> 
> unter Windows 2000 passiert starte ich folgendes Progrämmchen,
> schliesse das Tkinter-Fenster und starte neu. Es öffnet, wenn vh.
> die Datei afile lädt den Inhalt als Unicode in das Text widget,  hängt
> den Unicode String "Hallo\nWelt" hintendran und speichert den
> Inhalt des widgets dann als cp1252 ab.
> #----------------------------------
> import codecs
> import Tkinter
> 
> try:
>     f = codecs.open("afile","r","cp1252")
>     s = f.read()
>     f.close()
> except IOError:
>     s = ""
> s = s + u"Hallo\nWelt"
> txt = Tkinter.Text()
> txt.configure(wrap = "word")
> txt.insert("end",s)
> txt.pack()
> f = open("afile", "w")
> s = txt.get(1.0,"end")
> s = unicode(s).encode("cp1252")

Wieso benutzt Du hier nicht auch codecs.open() ? 

> f.write(s)
> f.close()
> 
> txt.mainloop()
> #-----------------------------------
> Das wirklich komische ist, wenn ich mir die Datei afile dann
> anschaue, dann sind die \n in CRLF konvertiert (Zeilenende unter
> Windows), aber bei jedem Durchlauf, also Laden, Verändern und
> Abspeichern kommt, ein weiteres CR hinzu, aber kein LF. Das
> scheint mir nicht logisch und stört ausserdem beträchtlich. Warum
> ist das so? Es muss, denke ich, irgendwie an codex.open() liegen

Was kommt denn von dem Widget zurück ? String oder Unicode
und mit oder ohne CRLF ?

Übrigens öffnest Du die Dateien im Textmodus, d.h. die C lib
konvertiert die Zeilenenden nach eigenem Ermessen. Was Du
eigentlich möchtest ist Binärmodus also "rb" und "wb". Auch hier
hilft codecs.open(), denn es fügt das "b" automatisch hinzu.

-- 
Marc-Andre Lemburg
______________________________________________________________________
Company & Consulting:                           http://www.egenix.com/
Python Software:                        http://www.lemburg.com/python/



More information about the Python-de mailing list