如何获取用于GetUserName
从 win32 API 返回的字符串的编码?我正在使用 pywin32,它返回一个 8 位字符串。在我的德语 XP 上,这个字符串显然是使用 Latin-1 编码的,但其他 Windows 安装可能不是这种情况。
我可以使用GetUserNameW
,但我必须自己使用 ctypes 来包装它,如果有更简单的解决方案,我现在想避免这种情况。
您可以调用GetACP来查找当前的 ANSI 代码页,这是非 Unicode API 使用的。您还可以使用MultiByteToWideChar并将零作为代码页传递(CP_ACP 在 Windows 标头中定义为零)以将代码页字符串转换为 Unicode。
我意识到这并不能直接回答您的问题,但我强烈建议您解决使用 Unicode-clean 的麻烦,GetUserNameW
如您所提到的。
非宽命令在不同的 Windows 版本上的工作方式不同(例如我,虽然我承认这个例子是旧的!),所以恕我直言,让它正确是值得的。
做了很多多语言的 Windows 开发,虽然宽 API 可以添加一层翻译或包装(正如你所建议的那样!),这是值得的。
好的,这就是我现在使用的:
>>> import win32api
>>> u = unicode(win32api.GetUserName(), "mbcs")
>>> type(u)
<type 'unicode'>
mbcs
是Windows中的一种特殊标准编码:
仅限 Windows:根据 ANSI 代码页 (CP_ACP) 对操作数进行编码
从 API 文档中,GetUserNameA 将以 ANSI 格式返回名称,而 GetUserNameW 将以 Unicode 格式返回名称。您将不得不使用 GetUserNameW。