1

textctrlにバルト文字を入力してボタンtest1をクリックすると、エラーが発生します

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

ボタンtest2は正常に動作します。

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

アップデート1

このコードを2台のWindows7Ultimatex64コンピューターで試しました。

どちらもPython2.7とPython2.7用のwxPython2.8win64ユニコードを持っています

どちらのマシンでも同じエラーが発生します。

4

3 に答える 3

0

再現できません...スウェーデン語の文字「åäö」を試してみると、「ąčęėįš」ロケールの問題を使用している場合でも機能するようです。

于 2010-11-16T10:10:13.733 に答える
0

wxPythonのユニコードビルドを使用していますか?プラットフォームやその他のシステムの詳細については言及していません。

于 2010-11-16T10:22:35.267 に答える
0

def OnTest1(self、event)を置き換えます:self.output_list.InsertStringItem(0、str(self.input_area.GetValue())。decode('utf-8'))

def OnTest1(self、event):

    self.output_list.InsertStringItem(0,self.input_area.GetValue())
于 2010-11-20T03:34:08.003 に答える