Seite 1 von 1

TreeControll und Codierung

Verfasst: Dienstag 20. November 2007, 17:07
von jeroen
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

Verfasst: Dienstag 20. November 2007, 18:21
von 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.

Verfasst: Dienstag 20. November 2007, 19:21
von jeroen
Hi,

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

jeroen

Verfasst: Dienstag 20. November 2007, 19:40
von Leonidas
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.

Verfasst: Mittwoch 21. November 2007, 18:22
von jeroen
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

Verfasst: Mittwoch 21. November 2007, 18:45
von 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.

Verfasst: Mittwoch 21. November 2007, 19:24
von jeroen
gut hab ich verstanden.

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

jeroen

Verfasst: Mittwoch 21. November 2007, 19:31
von Leonidas
jeroen hat geschrieben:Gibt es eine Decodierfunktion oder so was ?
(Unicode -> UTF8)

Code: Alles auswählen

u"Dein Unicode-String".encode('utf-8')

Verfasst: Mittwoch 21. November 2007, 20:17
von jeroen
Vielen Danke. Funktioniert.

Code: Alles auswählen

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