Seite 1 von 1
Menü Zeichenkodierung
Verfasst: Donnerstag 5. Juni 2008, 10:31
von Redoute
Hallo,
bei:
Code: Alles auswählen
# -*- coding: UTF-8 -*-
...
item = menu.Append(wx.ID_UNDO, text = "&Rückgängig\tCtrl+Z")
werden die Umlaute unter Windows verstümmelt. Verwende ich:
dann beschwert sich GTK, dass der String kein gültiges Unicode ist. Gibt es eine einfache Möglichkeit, die unter beiden Systemen funktioniert?
Re: Menü Zeichenkodierung
Verfasst: Donnerstag 5. Juni 2008, 12:20
von gerold
Hallo Redoute!
Willkommen im Python-Forum!
Drei Hinweise:
1.) Das Encoding-Cookie ``# -*- coding: xxx -*-`` muss das Encoding anzeigen, in welchem die Quellcodedatei gespeichert wird. Kein Probieren --> Wissen. Wenn du die Quellcodedatei in UTF-8 abspeicherst, dann muss hier auch "UTF-8" stehen -- und nichts anderes.
2.) Nimm Unicode-Strings statt Bytecodestrings. Kennzeichne den Text also mit einem vorangestellten "u".
Code: Alles auswählen
item = menu.Append(wx.ID_UNDO, text = u"&Rückgängig\tCtrl+Z")
3.) Unterstütze wxPython, indem du wxPython das Coding der Quellcodedatei mitteilst:
Code: Alles auswählen
#!/usr/bin/env python
# -*- coding: iso-8859-15 -*-
import wx
wx.SetDefaultPyEncoding("iso-8859-15")
...
mfg
Gerold

Re: Menü Zeichenkodierung
Verfasst: Donnerstag 5. Juni 2008, 12:46
von Redoute
Danke! Mit
geht's jetzt auch unter Windows. Hätte mich auch gewundert, wenn die Menünamen explizit konvertiert werden müssten.
Sollte das nicht auch in der wxWidgets-Hilfedatei als Python-spezifische Ergänzung drinstehen?
gerold hat geschrieben:Nimm Unicode-Strings statt Bytecodestrings.
Macht das noch einen Unterschied, wenn das Programm in UTF-8 gespeichert ist?
Re: Menü Zeichenkodierung
Verfasst: Donnerstag 5. Juni 2008, 12:52
von gerold
Redoute hat geschrieben:gerold hat geschrieben:Nimm Unicode-Strings statt Bytecodestrings.
Macht das noch einen Unterschied, wenn das Programm in UTF-8 gespeichert ist?
Hallo Redoute!
Man sollte an ein wx-Widget Unicode übergeben und beim Auslesen Unicode erwarten. ``wx.SetDefaultPyEncoding("UTF-8")`` ist nur ein Notnagel. Falls man vergisst, Unicode zu übergeben, versucht wxPython anhand dieser Information den Bytecode intern nach Unicode umzuwandeln.
mfg
Gerold

Re: Menü Zeichenkodierung
Verfasst: Donnerstag 5. Juni 2008, 14:18
von Redoute
gerold hat geschrieben:Man sollte an ein wx-Widget Unicode übergeben und beim Auslesen Unicode erwarten. ``wx.SetDefaultPyEncoding("UTF-8")`` ist nur ein Notnagel. Falls man vergisst, Unicode zu übergeben, versucht wxPython anhand dieser Information den Bytecode intern nach Unicode umzuwandeln.
Du hast vollkommen recht, wenn ich ein u vor den String setze, geht es auch ohne den "Notnagel".
Was mich immer noch irritiert: Der Quelltext ist UTF-8-kodiert - ich habe das jetzt noch einmal mittels Hex-Editor überprüft -, die Coding-Zeile am Anfang ist richtig angegeben, und trotzdem interpretiert wxPython (ohne Notnagel) offenbar unter Windows einen Bytestring nicht als UTF-8.
OK, ich habe das jetzt zur Kenntnis genommen und werde alle Einzelstrings als Unicode kennzeichnen. Danke schön!
Verfasst: Donnerstag 5. Juni 2008, 14:45
von BlackJack
Warum irritiert Dich das? Die Coding-Zeile hat damit nichts zu tun, die ist einzig und allein für den Compiler da, damit der weiss, wie er u'unicode'-Zeichenketten zu behandeln hat.