GetUserName()返回的字符串编码

2024-09-28 22:37:24 发布

您现在位置:Python中文网/ 问答频道 /正文

如何从win32 API获取GetUserName返回的字符串所使用的编码?我使用的是pywin32,它返回一个8位字符串。在我的德语XP上,这个字符串显然是用拉丁语-1编码的,但对于其他Windows安装来说可能不是这样。在

我可以使用GetUserNameW,但我必须自己使用ctypes来包装它,如果有更简单的解决方案,我现在想避免这种情况。在


Tags: 字符串api编码windows情况解决方案ctypesxp
3条回答

您可以调用GetACP来查找当前的ANSI代码页,这是非Unicode API所使用的。您也可以使用MultiByteToWideChar,并传递0作为代码页(CP_ACP在Windows标题中定义为零)来将代码页字符串转换为Unicode。在

我知道这并不能直接回答您的问题,但我强烈建议您克服使用Unicode cleanGetUserNameW的麻烦。在

非wide命令在不同的Windows版本上的工作方式不同(例如,我承认这个例子很旧!)所以我觉得做对了是值得的。在

做了很多多语种的Windows开发,尽管wideapi可以添加一层翻译或包装(正如您所建议的!),值得。在

好吧,我现在用的是:

>>> import win32api
>>> u = unicode(win32api.GetUserName(), "mbcs")
>>> type(u)
<type 'unicode'>

mbcs是Windows中的特殊standard encoding

Windows only: Encode operand according to the ANSI codepage (CP_ACP)

相关问题 更多 >