использование символов юникода с wxPython - PullRequest
1 голос
/ 03 октября 2010

У меня проблема с wxpython и его элементом управления расширенным текстом, когда я пытаюсь вставить символы Юникода ... \ xb2 печатает апекс '2', '\ u2074' должен печатать апекс '4' ...
редактировать: я использую Windows Vista ... и я попытался "кодирование cp1252" и "UTF-8", но с тем же результатом ...
2edit: на 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 ]

2 голосов
/ 03 октября 2010

Если вам нужна поддержка Unicode, вам следует использовать версию wxpython для Unicode.

Для каждой из поддерживаемых версий Python на Win32 существует две версии wxPython.Они почти идентичны, за исключением того, что один из них был скомпилирован с поддержкой Unicode-версии API-интерфейсов платформы.Если вам не сказали иначе, вы, вероятно, захотите получить Unicode-сборку wxPython.

Большинство других платформ также имеют две версии.

Работает нормально, если вы передаете фактическуюсимволы например

self.rtc.WriteText("hei!²")
0 голосов
/ 03 октября 2010

Иногда это может произойти, если вы забыли установить кодировку.Поместите это в начало кода:

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

перед любым кодом, включая комментарии, но после шебанга (#! / Usr / bin / python)

...