我有一個簡單的Python應用程序,它位於Windows XP系統托盤中。該應用程序使用pywin32(Build 218)作爲其GUI,並在Python 2.7.6上運行。一切很順利,直到我試圖用Unicode值創建一個菜單項:win32gui.AppendMenu中的Unicode字符呈現爲問號
# -*- coding: utf-8 -*-
import win32gui
...
menu = win32gui.CreatePopupMenu()
win32gui.AppendMenu(menu, win32con.MF_STRING, 1, u'Выход')
該菜單項呈現五個問號(「?????」),而ASCII字符串工作得很好。
如果我改變字符串字面定義爲Python 3和Python的3.3.3運行,菜單項文本正確顯示:
win32gui.AppendMenu(menu, win32con.MF_STRING, 1, 'Выход')
呈現爲「Выход」。
我必須堅持使用Python 2,因爲應用程序使用的某些模塊與3.x.x不兼容。
SO與C的類似問題(#1,#2)WinAPI似乎可以通過定義UNICODE並使用L「字符串文字來解決。但我不知道如何用pywin32來完成這個任務。對字符串使用utf-16le編碼沒有幫助。
瞎猜:嘗試用'win32gui.AppendMenuW' – manuell
@manuell呀,如果只是這樣的功能在'win32gui'存在:'AttributeError的: '模塊' 對象有沒有屬性 'AppendMenuW' ' – Warwick
然後,您可以使用ctypes並調用'ctypes.windll.User32.AppendMenuW' – manuell