如何从win32 API获取GetUserName
返回的字符串所使用的编码?我正在使用pywin32并返回一个8位字符串。在我的德语XP上,这个字符串显然是使用Latin-1编码的,但对于其他Windows安装可能不是这种情况。
我可以使用GetUserNameW
,但我必须自己使用ctypes包装它,如果有一个更简单的解决方案,我现在想避免使用它。
答案 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。