2016-07-16 78 views
1

爲什麼這隻會爲標題和框內打印一個字符。我如何確保它能打印所有內容?MessageBox只顯示一個字符

import ctypes 
ctypes.windll.user32.MessageBoxA(0, "info", "title", 3) 

只有'我'被打印,只有't'被打印標題,這是什麼問題?

回答

2

如果測試

ctypes.windll.user32.MessageBoxW(0, "info", "title", 3) 

應該有 「信息」 和 「稱號」。此外,如果你測試

ctypes.windll.user32.MessageBoxA(0, "info".encode('ascii'), 
           "title".encode('ascii'), 3) 

所以它似乎是某種文字編碼問題。 UTF-16編碼的字符串可能默認傳遞。

>>> 'info'.encode('utf-16-le') 
b'i\x00n\x00f\x00o\x00' 
>>> 'title'.encode('utf-16-le') 
b't\x00i\x00t\x00l\x00e\x00' 

由於MessageBoxA預計NULL終止的C字符串,從一開始只有兩個字符,即'i\0''t\0',得到考慮。

+1

'ctypes.windll.user32.MessageBoxA(0,b'info',b'title',3)'也很好 –