请教一个wxPython的Unicode问题

shhgs 2004-08-24 11:00:32
wxPython的Unicode有一个让我非常困惑的地方。请看下面的代码:

-------------------------------------
lbl = unicode("你好", 'cp936')
button1 = wx.Button(panel, 1001, u'\u4f60\u597d')
button2 = wx.Button(panel, 1001, lbl)
-------------------------------------

为什么显示出来,button1上是汉字,而button2上则是乱码?

哪位能不吝赐教,在下不胜感激。当然,如果能有解决方案那就更好了。
...全文
136 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
shhgs 2004-08-24
  • 打赏
  • 举报
回复
更正一下。

原来是编辑器的编码搞错了。我以为是以ansi编码存的源文件,结果却存成了utf8。怪不得写了中文,它也不报pep-0263的警告。
shhgs 2004-08-24
  • 打赏
  • 举报
回复
非常感谢limodou。

问题出在我把windows平台的字符编码搞错了。我原以为中文是用GB编码的,经实验发现,应该是utf8。现在问题已经解决了。

---------------------
unistr = lambda s : s.decode("utf_8")
...
lbl = '你好'
button = wx.Button(panel, 1001, unistr(lbl))
---------------------
mahongxi 2004-08-24
  • 打赏
  • 举报
回复
同意 oncsdn(青蛙)
limodou 2004-08-24
  • 打赏
  • 举报
回复
太夸张了吧。:P *_@
oncsdn 2004-08-24
  • 打赏
  • 举报
回复
limodou() 高人也
limodou() 高人也
limodou() 高人也
limodou() 高人也
limodou() 高人也
limodou() 高人也
limodou() 高人也
limodou() 高人也
limodou() 高人也
limodou() 高人也
limodou() 高人也
limodou() 高人也

limodou 2004-08-24
  • 打赏
  • 举报
回复
在wxPython中处理unicode,首先要保证你得到的字符串一定是unicode,但象上面的:
lbl = unicode("你好", 'cp936')
因为没有运行的环境,我不能保证这一定会得到一个unicode字符串。因为,上面的用法,首先"你好"一定要cp936编码,如果它已经是一个unicode了,再执行unicode了,会得到一个乱码。因此我建议打出来看一看。如果真正是unicode了,那一定是没问题,如果不是则说明你得到"你好"的方式需要考虑。

对于unicode的处理,不能说简单,但也不是麻烦以哪里去。只要你形成自已的处理模式就很容易了。现在我做的NewEdit是支持国际化处理的,因此我的程序全部是英文的字符串,在需要有相应的中文支持时,加上国际化处理函数,然后通过工具将这些特殊的字符串提取出来,得到一个po文件,然后手工进行翻译成中文,再编译成mo文件。运行时,选择相应的语言环境就可以了。

再加上下面的简单规则:

当然你的处理不用这么复杂。只要保证在wxPython中用到的中文都正确转换为unicode就行了。简单地处理可以是:
1. 对于程序中的中文,使用unicode函数进行转换
2. 对于有与外部进行的交互,如读文件,写文件等都要进行编码转换。不过,如果外部传进来就是unicode则不必这样做,还是要看具体的环境。因此要比较小心才行。
3. 有些模块得到的东西就是unicode的,不要进行转换。如xml的处理模块。
limodou 2004-08-24
  • 打赏
  • 举报
回复
你可以打印lbl看一看与button1中的文本是否一样。我猜测是不一样。

37,720

社区成员

发帖
与我相关
我的任务
社区描述
JavaScript,VBScript,AngleScript,ActionScript,Shell,Perl,Ruby,Lua,Tcl,Scala,MaxScript 等脚本语言交流。
社区管理员
  • 脚本语言(Perl/Python)社区
  • IT.BOB
加入社区
  • 近7日
  • 近30日
  • 至今

试试用AI创作助手写篇文章吧