_winreg.QueryValueEx returns "mixed typed" 二进制值
_winreg.QueryValueEx returns "mixed typed" binary value
在 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... '(粗体显示了一些有问题的值)
- 尝试了一些 decode\encode 选项,但由于混合类型而全部失败(例如
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 错误有关
如果您能提供帮助和提示以将其统一为单一类型,我们将不胜感激。
谢谢!
看起来您在注册表中的数据甚至不是 unicode。
您甚至需要将其解码为 unicode 吗?
为什么不将数据存储在二进制文件中?
bytes_data = winreg.QueryValueEx(your_key)
with open("filename.txt", "wb") as stream:
stream.write(bytes_data)
在 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... '(粗体显示了一些有问题的值)
- 尝试了一些 decode\encode 选项,但由于混合类型而全部失败(例如
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.
如果您能提供帮助和提示以将其统一为单一类型,我们将不胜感激。 谢谢!
看起来您在注册表中的数据甚至不是 unicode。 您甚至需要将其解码为 unicode 吗?
为什么不将数据存储在二进制文件中?
bytes_data = winreg.QueryValueEx(your_key)
with open("filename.txt", "wb") as stream:
stream.write(bytes_data)