Question

If I enter Baltic characters in textctrl and click button test1 I have an error

"InicodeEncodeError: 'ascii' codec can't encode characters in position 0-3: 
                     ordinal not in range(128)"

Button test2 works fine.

#!/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()

Update 1

I have tried this code on two Windows 7 Ultimate x64 computers.

Both have python 2.7 and wxPython2.8 win64 unicode for python 2.7

In both machines I have the same error.

Was it helpful?

Solution

Replace def OnTest1(self, event): self.output_list.InsertStringItem(0,str(self.input_area.GetValue()).decode('utf-8'))

with

def OnTest1(self, event):

    self.output_list.InsertStringItem(0,self.input_area.GetValue())

OTHER TIPS

can't reproduce... If I try with swedish caracters "åäö" it seems to work, also when using "ąčęėįš" locale problem?

Are you using the unicode build of wxPython? You didn't mention your platform and other system details.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top