Come passare stringa UTF-8 dal wx.TextCtrl a wx.ListCtrl
Domanda
Se entro personaggi baltiche in textctrl e fare clic sul pulsante test1 Ho un errore
"InicodeEncodeError: 'ascii' codec can't encode characters in position 0-3:
ordinal not in range(128)"
Pulsante test2 funziona bene.
#!/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()
Aggiornamento 1
Ho provato questo codice su due computer x64 di Windows 7 Ultimate.
Entrambi hanno python 2.7 e wxPython2.8 Win64 unicode per Python 2.7
In entrambe le macchine io ho lo stesso errore.
Soluzione
Sostituire def OnTest1 (self, evento): self.output_list.InsertStringItem (0, str (self.input_area.GetValue ()). decode ( 'utf-8'))
con
def OnTest1 (self, evento):
self.output_list.InsertStringItem(0,self.input_area.GetValue())
Altri suggerimenti
non è in grado di riprodurre ... Se provo con lettere accentate svedese "AAO" sembra funzionare, anche quando si utilizza "aceeiš" problema locale?
Si sta utilizzando la build unicode di wxPython? Lei non ha menzionato la propria piattaforma e l'altro sistema i dettagli.