Frage

Ich habe einen Debug-App ich mit dem Schreiben habe die Daten von einem C-basierten Prozess über UDP empfängt. Einer der Saiten zu mir geschickt enthält einen ° Charakter - Unicode U + 00B0 (die Pausen übrigens die Stackoverflow Suchfunktion!). Wenn meine WxPython Anwendung, die Zeichenfolge in ein Textfeld anhängen versucht, erhalte ich eine UnicodeDecodeError.

Mein erster Versuch das Problem zu beheben einfach diesen Fehler gefangen (weil die App anscheinend nicht senden einig schlechte Nachrichten. Das Problem ist, dass der App auch den Charakter verwendet verschiedene Temperaturen um die Einheit zu berichten und das ist etwas, was wir wirklich brauchen, um sich einzuloggen. Ändern der Quelle App aus meiner Kontrolle ist, so wie kann ich erkennen und diese Symbole in etwas entschlüsseln die wxTextCtrl anzeigen kann?

War es hilfreich?

Lösung

pdc es richtig gemacht, wird die folgende funktioniert gut (aber nicht ohne decode):

#!/usr/bin/env python
# -*- coding: utf-8 -*-
import wx

app = wx.PySimpleApp()
app.TopWindow = wx.Frame(None)
field = wx.TextCtrl(app.TopWindow)
field.Value += '°'.decode('ISO8859-1')
app.TopWindow.Show()
app.MainLoop()

Andere Tipps

Ich kann nicht sagen Mych über wxPython selbst, aber ich vermute, dass es den Text in Unicode zu konvertieren, bevor es angezeigt wird versucht, wenn Sie eine Zeichenfolge wie '123\xB0' haben und versuchen, es zu konvertieren mit teh Standardcodierung in Unicode ( ASCII), dann wird es UnicodeDecodeError werfen. Sie können sich wahrscheinlich dieses Problem beheben durch Ersetzen

s = message.get_string()

mit

s = message.get_string().decode('ISO8859-1')

(wobei ich eine Funktion get_string() gehe davon aus, dass die Nachricht als String bekommt). Der Unterschied besteht darin, dass die Umwandlung von Handong selbst in Unicode Sie die Codierung angeben, erhalten.

Die Dinge haben können unterschiedliche zurück gewesen, wenn dieser gefragt wurde, aber meine Gedanken für jeden, der stolpert auf diese:

Das Problem wird WxPython versucht in Unicode zu konvertieren, und es mangelt charset Informationen, die es versucht, ASCII zu verwenden, die ungültig ist. Wenn Sie Ihre Daten wissen, ist utf-8, sagen es so, und es wird nur funktionieren.

#!/usr/bin/env python
# -*- coding: utf-8 -*-
import wx

app = wx.PySimpleApp()
app.TopWindow = wx.Frame(None)
field = wx.TextCtrl(app.TopWindow)

string_data = '°'
print type(string_data)
# this would error, as it tries to convert to unicode from ascii
# field.Value += string_data

unicode_data = unicode(string_data, 'utf-8')
print type(unicode_data)
field.Value += unicode_data
app.TopWindow.Show()
app.MainLoop()
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top