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:

Code: Alles auswählen

# -*- coding: cp1252 -*-
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

Code: Alles auswählen

wx.SetDefaultPyEncoding("UTF-8")
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.