GetUserName()返回的字符串编码

时间:2009-03-21 18:51:08

标签: python winapi encoding pywin32

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

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

4 个答案:

答案 0 :(得分:5)

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

答案 1 :(得分:4)

我意识到这并没有直接回答你的问题,但我强烈建议你在使用你提到的Unicode-clean GetUserNameW时遇到麻烦。

非宽命令在不同的Windows版本上有不同的工作方式(例如ME,虽然我承认这个例子已经过时了!),所以恕我直言,这样做是值得的。

完成了大量的多语言Windows开发,虽然广泛的API可以添加一层翻译或包装(正如你的建议!),但这是值得的。

答案 2 :(得分:3)

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

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

mbcs是Windows中的特殊standard encoding

  

仅限Windows:根据ANSI代码页(CP_ACP)

编码操作数

答案 3 :(得分:0)

从API文档中,GetUserNameA将返回ANSI中的名称,GetUserNameW将返回Unicode中的名称。您必须使用GetUserNameW。