TreeControll und Codierung

Plattformunabhängige GUIs mit wxWidgets.
Antworten
jeroen
User
Beiträge: 11
Registriert: Dienstag 20. November 2007, 16:37

Hi,

ich hab ein Problem mit folgendem Code:

Code: Alles auswählen

# -*- coding: UTF-8 -*-

import wx
import os

class Anwendung(wx.Frame):
    def __init__(self):
        wx.Frame.__init__(self, None, -1, '')
        panel = wx.Panel(self, -1)
        self.tree = wx.TreeCtrl(panel, -1)
        self.text = wx.TextCtrl(panel, -1, '', pos=(0,100))
        button = wx.Button(panel, -1, '', pos=(0,120))


        self.tree.AddRoot('hallö')
        self.Bind(wx.EVT_BUTTON, self.Klick, button)

    def Klick(self, event):
        text = self.tree.GetItemText(self.tree.GetSelection());
        self.text.SetLabel(text)

        if text == 'hallö':
            wx.MessageBox('OK')
        else:
            wx.MessageBox('Not OK')

if __name__ == '__main__':
    app = wx.PySimpleApp()
    Anwendung().Show()
    app.MainLoop()
Die Fehlermedung ist folgende:

Code: Alles auswählen

D:\HSNR\ias\Praktikum2\test.py:22: UnicodeWarning: Unicode equal comparison fail
ed to convert both arguments to Unicode - interpreting them as being unequal
  if text == 'hall├Â':
Wo das Problem ist, ist klar.
In welcher Codierung gekomm ich mein ItemText zurück ?

jeroen
BlackJack

In gar keiner würde ich sagen. ``print type(text)`` dürfte zeigen, dass es sich um ein Unicode-Objekt handelt. Du solltest Deine Texte im Quelltext zu Unicode-Literalen machen, also u'hallö' schreiben.
jeroen
User
Beiträge: 11
Registriert: Dienstag 20. November 2007, 16:37

Hi,

gut. Wenn ich jetzt ein Variable hab, die einen String enthält, wie bekomm ich dann die Codierung raus ?

jeroen
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

jeroen hat geschrieben:gut. Wenn ich jetzt ein Variable hab, die einen String enthält, wie bekomm ich dann die Codierung raus ?
Gar nicht.

Es gibt genau _keinen_ Weg, um bei einem Bytestring herauszufinden, welches Encoding er hat. Man kann zwar raten, wie Encodinghelper oder Chardet das tun, aber das kann auch falsch sein. Daher sollten man nicht raten, was ja auch dem Zen of Python widersprechen würde.

Was also zu tun ist: Daten in UTF-8 entgegennehmen, Daten in UTF-8 abspeichern, intern durchweg Unicode nutzen.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
jeroen
User
Beiträge: 11
Registriert: Dienstag 20. November 2007, 16:37

ok.

ich hab ein anders problem.
Ich möchte gerne ein Unicode String in eine Datei schreiben.

Warum geht das nicht ?
Mit UTF-8 geht es Problemlos.

jeroen
BlackJack

Unicode ist etwas abstraktes, in Dateien kann man aber ganz konkret nur Bytes speichern, also muss man irgendwie die Unicode-Zeichenkette in konkrete Bytes umsetzen. Und da gibt's halt mehrere Arten, von Kodierungen die nicht den gesamten Unicode-Umfang abbilden können, bis zu den UTF-*-Kodierungen.
jeroen
User
Beiträge: 11
Registriert: Dienstag 20. November 2007, 16:37

gut hab ich verstanden.

Gibt es eine Decodierfunktion oder so was ?
(Unicode -> UTF8)

jeroen
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

jeroen hat geschrieben:Gibt es eine Decodierfunktion oder so was ?
(Unicode -> UTF8)

Code: Alles auswählen

u"Dein Unicode-String".encode('utf-8')
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
jeroen
User
Beiträge: 11
Registriert: Dienstag 20. November 2007, 16:37

Vielen Danke. Funktioniert.

Code: Alles auswählen

Ausgabe = Ausgabe.encode('utf-8')
Antworten