win32ui的api如何使用unicode?

codesnail 2011-02-17 04:49:36

#coding=utf-8
import win32ui

str1="我们的世界"

h1=win32ui.GetForegroundWindow()
h1.SetWindowText(str1) #调用完之后,窗口标题不显示"我们的世界",显示乱码,请问如何解决?

...全文
267 21 打赏 收藏 转发到动态 举报
写回复
用AI写文章
21 条回复
切换为时间正序
请发表友善的回复…
发表回复
codesnail 2011-02-18
  • 打赏
  • 举报
回复
确实如你所说,日文编码用的是shift_jis,但是这个编码里可能没有"们",因为


win32ui.MessageBox(u'我的世界'.encode("shift_jis"),"title",win32con.MB_OK) #没有错误
win32ui.MessageBox(u'我们的世界'.encode("shift_jis"),"title",win32con.MB_OK) #加上们就编码错误


至于你说是不是编码中另一个值代表“们”就不得而知了。
iambic 2011-02-18
  • 打赏
  • 举报
回复
要不然再试下日文系统的编码?日文系统用的什么编码?是不是日文里用的不是这个字符(用的是另外一个看起来一样但是值不同的字符)?你用repr(os.listdir(...))拿到文件名的原生字符串,然后放在代码里看看。
codesnail 2011-02-18
  • 打赏
  • 举报
回复
图示如下,不知道系统是怎么实现的,"们"好像比其他几个字大。。。

codesnail 2011-02-18
  • 打赏
  • 举报
回复
[Quote=引用 17 楼 iambic 的回复:]

哈哈,日文系统啊,怪不得。日文系统filesystemencoding不知道管用不管用,没经验,还是用unicode吧。估计是字体的问题,你建一个叫“我们的世界.txt”,然后用记事本打开,标题栏里的中文能正常显示吗?
[/Quote]

想到一块去了,我昨天下午就试了,没有问题的,所以我就不明白了。。。。。。
iambic 2011-02-18
  • 打赏
  • 举报
回复
哈哈,日文系统啊,怪不得。日文系统filesystemencoding不知道管用不管用,没经验,还是用unicode吧。估计是字体的问题,你建一个叫“我们的世界.txt”,然后用记事本打开,标题栏里的中文能正常显示吗?
codesnail 2011-02-18
  • 打赏
  • 举报
回复
现在感觉可能是系统字体的原因,是由于字体导致某些汉字显示成“?”而不是乱码。。。。。。。
codesnail 2011-02-18
  • 打赏
  • 举报
回复
刚google了一下,我的系统字体中所有的项目的系统字体都被置灰了,不让设置。。。。
codesnail 2011-02-18
  • 打赏
  • 举报
回复
回楼上:
我用的是日文xp,区域语言设置成日文或者中文效果一样,都有一些汉字显示不了的情况,不过日文显示很正常,,系统编码用您的方法得到的是mbcs,系统字体怎么看???
iambic 2011-02-18
  • 打赏
  • 举报
回复
你用的是什么操作系统?区域和语言设置都是什么?系统字体呢?
codesnail 2011-02-18
  • 打赏
  • 举报
回复

import win32ui
import win32con

win32ui.MessageBox(u'\u6211\u4eec\u7684\u4e16\u754c',"title",win32con.MB_OK)


源码存成ansi编码格式,问题依然存在,utf8编码的'\xce\xd2\xc3\xc7\xb5\xc4\xca\xc0\xbd\xe7'更不行了。
codesnail 2011-02-18
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 iambic 的回复:]

你有用过我的方式没?不要在代码里放中文。
[/Quote]
试过了。。。。。
iambic 2011-02-18
  • 打赏
  • 举报
回复
你有用过我的方式没?不要在代码里放中文。
codesnail 2011-02-18
  • 打赏
  • 举报
回复
重新理一下思路


#coding=utf-8
import win32ui
h1=win32ui.GetForegroundWindow()
h1.SetWindowText(u"我们的世界")
#源码存成utf8格式
#1.这里的u"我们的世界"是unicode编码,这种情况下只有"们"字显示不出来
#2.如果不加u,直接用"我们的世界"则是utf8编码则全都显示乱码
#3.如果用u"我们的世界".encode("mbcs")得到的结果和unicode一样


结论:win32uiapi是支持unicode,但是支持的不完全
codesnail 2011-02-18
  • 打赏
  • 举报
回复
感谢楼上的回复,不过我不知道您是怎么测试的,我的代码就这几行不明白还有什么低级错误,我贴的代码我是存储成utf-8格式的,然后我又把代码存成ansi格式用你楼上的方法依然不行。

另:我的系统是日文xp
iambic 2011-02-17
  • 打赏
  • 举报
回复
测试过了,str和unicode应该都可以。你先排除低级错误吧,代码里面写:

str1 = u'\u6211\u4eec\u7684\u4e16\u754c'

或者:

str1 = '\xce\xd2\xc3\xc7\xb5\xc4\xca\xc0\xbd\xe7'

然后再试下。
iambic 2011-02-17
  • 打赏
  • 举报
回复
不用哭,要是真不支持的话可以试下:
h1.SetWindowText(u"我们的世界".encode(sys.getfilesystemencoding()))

等我装个pywin32试试。应该还是支持unicode的。
codesnail 2011-02-17
  • 打赏
  • 举报
回复
加上 win32ui.UNICODE=True也不行。。。。期待高人。。
codesnail 2011-02-17
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 iambic 的回复:]

机器上没有win32ui,不知道是不是像Windows API一样有两个版本:

Python code
h1.SetWindowTextA(str1) # ansi
h1.SetWindowTextW(str2) # unicode
[/Quote]
悲剧了,刚查了下手册,没有unicode版本,,,,我哭。。。。。

难道是用python3.0版本的可以?我用的是2.5.1
codesnail 2011-02-17
  • 打赏
  • 举报
回复
杯具了,好像pywin32里的SetWindowText没有unicode版本。。。。???
iambic 2011-02-17
  • 打赏
  • 举报
回复
机器上没有win32ui,不知道是不是像Windows API一样有两个版本:

h1.SetWindowTextA(str1) # ansi
h1.SetWindowTextW(str2) # unicode

加载更多回复(1)

37,721

社区成员

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

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