2024-09-28 22:37:24 发布
网友
如何从win32 API获取GetUserName返回的字符串所使用的编码?我使用的是pywin32,它返回一个8位字符串。在我的德语XP上,这个字符串显然是用拉丁语-1编码的,但对于其他Windows安装来说可能不是这样。在
GetUserName
我可以使用GetUserNameW,但我必须自己使用ctypes来包装它,如果有更简单的解决方案,我现在想避免这种情况。在
GetUserNameW
您可以调用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:
mbcs
Windows only: Encode operand according to the ANSI codepage (CP_ACP)
您可以调用GetACP来查找当前的ANSI代码页,这是非Unicode API所使用的。您也可以使用MultiByteToWideChar,并传递0作为代码页(CP_ACP在Windows标题中定义为零)来将代码页字符串转换为Unicode。在
我知道这并不能直接回答您的问题,但我强烈建议您克服使用Unicode clean
GetUserNameW
的麻烦。在非wide命令在不同的Windows版本上的工作方式不同(例如,我承认这个例子很旧!)所以我觉得做对了是值得的。在
做了很多多语种的Windows开发,尽管wideapi可以添加一层翻译或包装(正如您所建议的!),值得。在
好吧,我现在用的是:
mbcs
是Windows中的特殊standard encoding:相关问题 更多 >
编程相关推荐