2

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

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

4

4 回答 4

5

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

于 2009-03-21T19:09:41.547 回答
5

我意识到这并不能直接回答您的问题,但我强烈建议您解决使用 Unicode-clean 的麻烦,GetUserNameW如您所提到的。

非宽命令在不同的 Windows 版本上的工作方式不同(例如我,虽然我承认这个例子是旧的!),所以恕我直言,让它正确是值得的。

做了很多多语言的 Windows 开发,虽然宽 API 可以添加一层翻译或包装(正如你所建议的那样!),这是值得的。

于 2009-03-21T19:09:53.607 回答
3

好的,这就是我现在使用的:

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

mbcs是Windows中的一种特殊标准编码:

仅限 Windows:根据 ANSI 代码页 (CP_ACP) 对操作数进行编码

于 2009-03-22T13:05:37.203 回答
0

从 API 文档中,GetUserNameA 将以 ANSI 格式返回名称,而 GetUserNameW 将以 Unicode 格式返回名称。您将不得不使用 GetUserNameW。

于 2009-03-21T19:09:16.697 回答