TreeControll und Codierung

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

TreeControll und Codierung

Beitragvon jeroen » Dienstag 20. November 2007, 17:07

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

Beitragvon BlackJack » Dienstag 20. November 2007, 18:21

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

Beitragvon jeroen » Dienstag 20. November 2007, 19:21

Hi,

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

jeroen
Benutzeravatar
Leonidas
Administrator
Beiträge: 16023
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Beitragvon Leonidas » Dienstag 20. November 2007, 19:40

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 Modvoice
jeroen
User
Beiträge: 11
Registriert: Dienstag 20. November 2007, 16:37

Beitragvon jeroen » Mittwoch 21. November 2007, 18:22

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

Beitragvon BlackJack » Mittwoch 21. November 2007, 18:45

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

Beitragvon jeroen » Mittwoch 21. November 2007, 19:24

gut hab ich verstanden.

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

jeroen
Benutzeravatar
Leonidas
Administrator
Beiträge: 16023
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Beitragvon Leonidas » Mittwoch 21. November 2007, 19:31

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 Modvoice
jeroen
User
Beiträge: 11
Registriert: Dienstag 20. November 2007, 16:37

Beitragvon jeroen » Mittwoch 21. November 2007, 20:17

Vielen Danke. Funktioniert.


Code: Alles auswählen

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

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder