Menü Zeichenkodierung

Plattformunabhängige GUIs mit wxWidgets.
Redoute
User
Beiträge: 16
Registriert: Donnerstag 5. Juni 2008, 10:21

Menü Zeichenkodierung

Beitragvon Redoute » Donnerstag 5. Juni 2008, 10:31

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?
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5554
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Telfs (Tirol)
Kontaktdaten:

Re: Menü Zeichenkodierung

Beitragvon gerold » Donnerstag 5. Juni 2008, 12:20

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
:-)
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Redoute
User
Beiträge: 16
Registriert: Donnerstag 5. Juni 2008, 10:21

Re: Menü Zeichenkodierung

Beitragvon Redoute » Donnerstag 5. Juni 2008, 12:46

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?
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5554
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Telfs (Tirol)
Kontaktdaten:

Re: Menü Zeichenkodierung

Beitragvon gerold » Donnerstag 5. Juni 2008, 12:52

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
:-)
http://halvar.at | Kleiner Bascom AVR Kurs

Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Redoute
User
Beiträge: 16
Registriert: Donnerstag 5. Juni 2008, 10:21

Re: Menü Zeichenkodierung

Beitragvon Redoute » Donnerstag 5. Juni 2008, 14:18

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!
BlackJack

Beitragvon BlackJack » Donnerstag 5. Juni 2008, 14:45

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.

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder