[Python-de] Unicode-Chaos im Tkinter Text-widget???

CCF.Herzog at gmx.net CCF.Herzog at gmx.net
Fri Apr 20 17:25:28 EDT 2001


Hallo,
das Problem scheint nach meinem jetzigen Wissensstandwie folgt 
zu liegen und womöglich ein übler Bug zu sein; da ich leider nur 
Windows 2000 auf dem Rechner habe, kann ich nur davon 
sprechen:
Eingaben von der Tastatur in das Text-widget von Tkinter, die 
Zeichen im ANSI-Bereich > 128 betreffen, also die Umlaute auf der 
deutschen Tastatur, oder Eingaben der Art ALT+Numernblock 0xxx 
quittiert das Text-widget von Tkinter grundsätzlich damit, dass es 
diese intern als Latin-1 codiert.
Liegt intern bereits Text im Unicode-Format vor, dann wird dieser in 
eine Doppelbyte-Codierung (vermutlich utf-8) umgewandelt, das 
betrifft aber NICHT DIE ÜBER DIE TASTATUR EINGEGEBENEN 
ZEICHEN > 128. Der resultierende Python-Typ im Text-widget 
wandelt sich dabei von unicode nach string, allerdings liegt nun de 
facto ein Mischtyp vor, teils in Doppelbyte-Codierung, teils in Latin-
1. Ich habe nun bis jetzt keinen Weg gefunden, diese Mischung 
wieder zu "entmischen".
Auch die von Martin dankenswerterweise vorgeschlagene Lösung:

def output_encoding(s):
  if type(s) is types.StringType:
    return s
  return s.encode("cp1252")
...
f.write(output_encoding(txt))

funktioniert da nicht. Ich kenne mich leider mit den ganzen codecs-
Sachen, unicode etc. nun überhaupt nicht aus, aber es kommt mir 
doch so vor, als sei das eigentlich so nicht vorgesehen.
Da ich nur Zeichen verwende, die noch im 8-Bit-Bereich liegen 
(also <=255), könnte ich nun natürlich diese einfach als Latin-1 
oder cp1252 codieren. Leider reagiert das Text-widget auf einige 
dieser Zeichen damit, sie als erstes Zeichen einer Doppelbyte-
Codierung zu interpretieren und sie dann mit dem nachfolgenden 
Zeichen zusammenzuwerfen und entsprechend Müll darzustellen, 
so dass um Unicode-Codierung kein Weg herumführt.
Der einzige Workaround, der mir einfällt, ist, grundsätzlich alle 
Tastatureingaben über das Key-down-event abzufangen und dafür 
zu sorgen, dass immer unicode vorliegt. Aber das ist natürlich 
ziemlich aufwendig und ich muss mir dann auch noch Sorgen, um 
das Clipboard machen...(seufz).
Oder habe ich da irgendwo was übersehen?
Gruss
Christoph





More information about the Python-de mailing list