Cómo pasar UTF-8 cadena de wx.TextCtrl a wx.ListCtrl
Pregunta
Si entro caracteres Báltico en textctrl y haga clic en el botón test1 Tengo un error
"InicodeEncodeError: 'ascii' codec can't encode characters in position 0-3:
ordinal not in range(128)"
El botón test2 funciona bien.
#!/usr/bin/python
# -*- coding: UTF-8 -*-
import wx
class MyFrame(wx.Frame):
def __init__(self, parent, id, title):
wx.Frame.__init__(self, parent, id, title, (-1, -1), wx.Size(450, 300))
self.panel = wx.Panel(self)
self.input_area = wx.TextCtrl(self.panel, -1, '',(5,5),(200,200), style=wx.TE_MULTILINE)
self.output_list = wx.ListCtrl(self.panel, -1, (210,5), (200,200), style=wx.LC_REPORT)
self.output_list.InsertColumn(0, 'column')
self.output_list.SetColumnWidth(0, 100)
self.btn1 = wx.Button(self.panel, -1, 'test1', (5,220))
self.btn1.Bind(wx.EVT_BUTTON, self.OnTest1)
self.btn2 = wx.Button(self.panel, -1, 'test2', (100,220))
self.btn2.Bind(wx.EVT_BUTTON, self.OnTest2)
self.Centre()
def OnTest1(self, event):
self.output_list.InsertStringItem(0,str(self.input_area.GetValue()).decode('utf-8'))
def OnTest2(self, event):
self.output_list.InsertStringItem(0,"ąčęėįš".decode('utf-8'))
class MyApp(wx.App):
def OnInit(self):
frame = MyFrame(None, -1, 'encoding')
frame.Show(True)
return True
app = MyApp(0)
app.MainLoop()
Actualización 1
Me han tratado este código en dos equipos x64 de Windows 7 Ultimate.
Ambos tienen pitón 2.7 y wxPython2.8 Win64 Unicode para el pitón 2.7
En ambas máquinas tengo el mismo error.
Solución
Reemplazar def OnTest1 (auto, evento): self.output_list.InsertStringItem (0, str (self.input_area.GetValue ()). decodificación ( 'utf-8'))
con
def OnTest1 (self, evento):
self.output_list.InsertStringItem(0,self.input_area.GetValue())
Otros consejos
No se puede reproducir ... Si trato con carácteres sueca "AAO" Parece que funciona, también cuando se utiliza "aceeiš" problema local?
¿Está utilizando la acumulación de Unicode wxPython? Usted no ha mencionado su plataforma y otro sistema de datos.