nkoehring hat geschrieben:wie kann man das DefaultEncoding bei Unicode-Strings global setzen? Irgendwie steht es auf ASCII, aber ich will ja lieber UTF-8...
Code: Alles auswählen
# -*- coding: UTF-8 -*-
import wx
wx.SetDefaultPyEncoding("UTF-8")
Hallo nkoehring!
Du hast die Frage falsch gestellt. Unicode ist Unicode und braucht kein Encoding. Nur wenn du einen Bytestring nach Unicode umwandeln möchtest, dann musst du wissen, in welchem Encoding der Bytestring ist. Und umgekehrt.
Wenn dein Modul beim Speichern im Encoding UTF-8 gespeichert wurde, dann ist es auch wichtig und korrekt, wenn du im Kopf des Moduls mit dem "Encoding Cookie" Python bescheid gibst, dass das Modul im Encoding UTF-8 gespeichert wurde. So weiß Python beim Interpretieren, dass alle Texte, die mit einem führenden ``u`` gekennzeichnet wurden, UTF-8-Bytestrings sind, die es vor der Verwendung nach Unicode umwandeln soll. (z.B. ``u"Österreich"``)
Wenn du an wxPython einen Unicode-String übergibst, dann weiß wxPython dass es sich um Unicode handelt und arbeitet dementsprechend damit. Wenn du die Unicode-Version von wxPython installiert hast (was ratsam ist), dann bekommst du von wxPython *immer* Unicode zurück, wenn du einen Text anforderst.
Die Anweisung ``wx.SetDefaultPyEncoding("UTF-8")`` zeigt wxPython auf, dass immer dann, wenn es kein Unicode von dir bekommt, es sich um einen Bytestring im UTF-8 Encoding handelt und wandelt es intern wieder nach Unicode um. Das ist sozusagen eine Notfallmaßnahme, falls du vergisst, wxPython mit Unicode zu füttern.
Kümmere dich darum, dass wxPython von dir immer Unicode bekommt und verlasse dich darauf, dass du von wxPython immer Unicode zurück bekommst, wenn die Unicode-Version installiert ist. Das ist zumindest bei Ubuntu der Fall und sollte auch bei Windows ab Windows NT installiert werden. Die Ansi-Version von wxPython ist nur für Win95/98/ME gedacht, da diese mit Unicode nicht so gut klar kommen.
Bitte nicht schlagen, wenn ich es nicht klar rüber gebracht habe.
mfg
Gerold