TextCtrl - encoding Problem: UnicodeDecodeError Traceback

Plattformunabhängige GUIs mit wxWidgets.
Antworten
Benutzeravatar
jens
Python-Forum Veteran
Beiträge: 8502
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

wenn ich per WriteText ein Test mit "Sonderzeichen" wie ÄÖÜäöü schreibe, bekomme ich folgenden Traceback:
UnicodeDecodeError: 'ascii' codec can't decode byte 0xfc in position 7: ordinal not in range(128)
Muß ich Texte erst encoden?

Folgende coding kommentare schon probiert:
  • # -*- coding: ISO-8859-1 -*-
    # -*- coding: utf-8 -*-
    # -*- coding: latin-1 -*-
Benutzeravatar
jens
Python-Forum Veteran
Beiträge: 8502
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Problem gelöst, mit:

Code: Alles auswählen

text = unicode(text, sys.getfilesystemencoding())
Benutzeravatar
jens
Python-Forum Veteran
Beiträge: 8502
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Jetzt hab ich allerdings doch nocht ein Problem damit :(

Und zwar, wenn Bsp. ein Button-Namen mit Umlaute ist, bekomme ich wieder ein Traceback...

Also muß ich doch an dem Coding-Kommentar was ändern???

EDIT1:
Übrigends liefert mir sys.getfilesystemencoding() "mbcs" zurück ?!?

EDIT2:
sollte ich vielleicht besser "non Unicode wxPython" installieren??? Hab nämlich z.Z. "wx-2.5.3-msw-unicode" installiert...

EDIT3:

Code: Alles auswählen

import locale
print locale.getdefaultlocale()
('de_DE', 'cp1252')
Benutzeravatar
jens
Python-Forum Veteran
Beiträge: 8502
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

So, hab "non Unicode wxPython" also die ANSI version installiert... Und siehe da, die Fehler sind weg...

Kann mir das jetzt einer erklären??? :shock:
Benutzeravatar
jens
Python-Forum Veteran
Beiträge: 8502
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Ich hatte nun nocheinmal das Problem, mit einem wx.MessageBox("Gewählt:"...)
Es gab zwar kein Traceback, aber das "ä" wurde falsch Dargestellt...

Das lag aber daran, das die aktuelle Datei mit coding: UFT-8 abgespeichert wurde...

Richtig funktioniert es wenn ich als coding: cp1252 oder coding: ISO-8859-1 benutze...

Welches ist besser unter WinXP ?
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Bei mir geht sowas auch:

Code: Alles auswählen

import wx
app = wx.PySimpleApp()
msg = wx.MessageBox(u"öäüÖÄÜß", u"Unsere geliebten Umlaute")
Er gibt zwar eine DeprecationWarning aus, aber angezeigt wird es.

Und wenn ich es so mache hält er die Klappe und meckert nicht:

Code: Alles auswählen

# -*- coding: latin-1 -*-
import wx

app = wx.PySimpleApp()
msg = wx.MessageBox(u"öäüÖÄÜß", u"Unsere geliebten Umlaute")
Ich würde an deiner stelle latin-1 oder eben iso-8859-1 nehmen (was ja das gleiche ist), denn die CodePages sind afaik eine Erfindung Microsofts und ISO eben ISO Standards.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Antworten