在wxPython中使用unicode字符

时间:2010-10-03 12:55:20

标签: python unicode wxpython character

我遇到了wxpython及其富文本控件的问题,当我尝试插入unicode字符时... \ xb2打印顶点'2','\ u2074'应打印顶点'4'...
编辑:我使用windows vista ...我尝试'编码cp1252'和'utf-8',但结果相同...
2edit: 在vista它崩溃,在XP上它显示一个奇怪的方块(我猜它是当PC无法识别字符...)

这是源代码:

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 个答案:

答案 0 :(得分:2)

如果您需要Unicode支持,那么您应该使用wxpython的unicode版本。

  

wxPython有两个版本   每个受支持的Python版本   在Win32上。它们几乎相同,   除了其中一个已被编译   支持Unicode版本   平台API。除非你   有人告诉你,你可能   想要获得Unicode版本   wxPython的。

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

如果传递实际符号,例如

,它可以正常工作
self.rtc.WriteText("hei!²")

答案 1 :(得分:0)

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

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

在任何代码包括评论之前但在shebang之后(#!/ usr / bin / python)