VerQueryValue问题python 3

VerQueryValue问题python 3,python,python-3.x,ctypes,Python,Python 3.x,Ctypes,我试图通过GetFileVersionInfo和VerQueryValue获取文件的版本。我打印了部分版本,但不是全部。文件版本的每个字符之间也有一些奇怪的空格。有人知道怎么回事吗 我猜这与python3的Unicode解释有关,因为我必须从python2()中正常运行的原始GetFileVersionInfo和VerQueryValue更改GetFileVersionInfo和VerQueryValue 这些函数返回微软称之为“Unicode”的字符串,但实际上是编码为UTF-16LE的cty

我试图通过GetFileVersionInfo和VerQueryValue获取文件的版本。我打印了部分版本,但不是全部。文件版本的每个字符之间也有一些奇怪的空格。有人知道怎么回事吗

我猜这与python3的Unicode解释有关,因为我必须从python2()中正常运行的原始GetFileVersionInfo和VerQueryValue更改GetFileVersionInfo和VerQueryValue


这些函数返回微软称之为“Unicode”的字符串,但实际上是编码为UTF-16LE的
ctypes.wstring
可以转换的字符串
l.value
是UTF16字符的计数,而不是字节数,因此请使用以下方法对其进行正确解码。您不需要像现在这样对结果进行
.decode()

return wstring_at(r.value, l.value)

非常感谢@Mark Tolonen,这种编码/解码有时真的很混乱。只是一个简单的问题,您是如何知道函数wstring_at()的?我是否可以在线阅读有关python中ctypes的参考资料?@IkerHua ctypes库在docs.python.org上有很好的文档。另外
dir(ctypes)
列出了它,并且
help(ctypes.wstring_at)
对它进行了描述。当我运行此代码时,我得到一个错误“OSError:exception:access violation reading 0x0000000016F42058”,其中十六进制值对应于r,就好像它不是有效的内存指针一样。它在这一行失败codepages=array.array('H',string_at(r.value,l.value))。我可以用Ascii很好地运行Python2版本,但即使使用您的代码,我也无法在Python3中实现这一点。如果您可以发布功能完整的代码,那就太好了。它与上面的代码相同,但在返回时您会这样做:
return wstring\u at(r.value,l.value)
使用哪个版本的Python 3?我用3.5和3.6在几台不同的机器上进行了测试,我在codepages=array.array('H',string_at(r.value,l.value))行的每个系统上都发现了内存访问冲突。你有什么想法吗?肯定还有别的不同,我就是看不出来是什么。我用了3.3。嗯,很奇怪。。。
return wstring_at(r.value, l.value)