代码之家  ›  专栏  ›  技术社区  ›  Ant

对wxpython使用unicode字符

  •  1
  • Ant  · 技术社区  · 14 年前

    当我尝试插入Unicode字符时,wxpython和他的富文本控件有问题…\ XB2打印顶点“2”,'\u2074'应打印顶点“4”…
    编辑:我使用Windows Vista…我尝试了“编码CP1252”和“UTF-8”,但结果还是一样……
    2编辑: 在Vista上,它崩溃了,在XP上,它显示了一个奇怪的方块(我猜是在电脑无法识别字符的时候…)

    这是源代码:

    from __future__ import unicode_literals
    
    import wx
    import wx.richtext as rt
    
    class Trial(wx.Frame):
        def __init__(self):
            wx.Frame.__init__(self, None, -1, 'Prova', 
                    size=(400, 400))
    
            self.rtc = rt.RichTextCtrl(self, style=wx.VSCROLL|wx.HSCROLL|wx.NO_BORDER)
            wx.CallAfter(self.rtc.SetFocus)
            #self.rtc.Freeze()
            self.rtc.BeginFontSize(14)
            self.rtc.WriteText('hei!\xb2') #alright
            self.rtc.WriteText('hi\u2074!')#crash
            self.rtc.EndFontSize()
            
           
    if __name__ == '__main__':
        app = wx.PySimpleApp()
        frame = Trial()
        frame.Show()
        app.MainLoop()
    

    但当我试图运行它时,它崩溃了…

    Traceback (most recent call last):
      File "<pyshell#6>", line 1, in <module>
        frame = display.Trial()
      File "C:\Users\expert\Desktop\display.py", line 15, in __init__
        self.rtc.WriteText('hi\u2074!')
      File "C:\Python26\lib\site-packages\wx-2.8-msw-ansi\wx\richtext.py", line 2507, in WriteText
        return _richtext.RichTextCtrl_WriteText(*args, **kwargs)
      File "C:\Python26\lib\encodings\cp1252.py", line 12, in encode
        return codecs.charmap_encode(input,errors,encoding_table)
    UnicodeEncodeError: 'charmap' codec can't encode character u'\u2074' in position 4: character maps to <undefined>
    

    那么……我该怎么办?我真的需要展示它…

    谢谢大家!!

    2 回复  |  直到 14 年前
        1
  •  2
  •   volting    14 年前

    如果需要Unicode支持,则应使用wxpython的Unicode版本。

    有两个版本的wxpython用于 每个受支持的python版本 在Win32上。它们几乎相同, 除了其中一个已经被编译了 支持Unicode版本 平台API的。除非你 别人说的不一样,你可能 想要获取的Unicode版本 WXPython。

    大多数其他平台也有两个版本。

    如果你通过了实际的符号,比如

    self.rtc.WriteText("hei!²")
    
        2
  •  0
  •   Thomas O    14 年前

    如果忘记设置编码,有时会发生这种情况。把这个放在代码的顶部:

    # -*- encoding: utf-8 -*-
    

    在任何代码之前,包括注释,但在shebang之后()!/usr/bin/python)