【发布时间】:2017-02-20 16:47:04
【问题描述】:
在 Python 3.4 下,我使用 winreg.QueryValueEx() 从注册表中获取键值,以便将其与文本文件进行比较。
我遇到了REG_BINARY 键值为bytes 但其中有unicode 值的问题:
- 预期的注册表项值 - 52 50 43 46 01 1b 00 00 00 ff fe ff 04 46 00 6c 00 61...
- 返回的键值 - b'RPCF\x01\x1b\x00\x00\x00\xff\xfe\xff \x04F\x00l\x00a\x00t\x00\x00\n \x00\x8b...'(加粗一些有问题的值)
- 尝试了一些解码\编码选项,由于混合类型都失败了(例如
key_val.decode('utf-8')返回{UnicodeDecodeError}'utf-8' codec can't decode byte 0xff in position 9: invalid start byte)
我将返回的值(十六进制值列表)用于保存预期十六进制值的文本文件。这些粗体值不是预期的,因为它们不是十六进制格式,而且我不提前知道它们,以便做一些变通方法来专门处理它们。
在 Python 2.7 中,没有任何问题。我猜这与 Python 3 分离 str 和 bytes 甚至 Python 3 中 winreg 中的错误有关。
非常感谢任何帮助和提示,以便将其统一为单一类型。 谢谢!
【问题讨论】:
-
您为什么认为粗体值有问题?你想对失败的返回值做什么?您可以学习 How to Ask a good question 并创建一个 Minimal, Complete, and Verifiable 示例。这让我们更容易为您提供帮助。
-
例如,我希望这些值是 \x52\x50\x43\x46 而不是 RPCF - 所有字节格式相同。添加了我使用返回值的信息。
-
这些值实际上是相同的。您只是看到了 python 如何显示字符串与字节的工件。
标签: python python-3.x registry winreg