在Python 3.4下,我使用winreg.QueryValueEx()
从注册表中获取键值,以便将其与文本文件进行比较。 我遇到一个问题,即在REG_BINARY
键值为bytes
,但它也有Unicode值:_winreg.QueryValueEx返回“混合型”二进制值
- 预期的注册表项值 - 52 50 43 46 01 1B 00 00 00 FF FF FE 04 46 00 00 6C 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中的一个错误。
希望得到任何帮助和提示,以便将它统一为单一类型。 谢谢!
为什么你认为粗体值有问题?你想用失败的返回值做什么?你可以学习[如何提出一个好问题](http://stackoverflow.com/help/how-to-ask)并创建一个[Minimal,Complete,and Verifiable](http://stackoverflow.com/help/) mcve)的例子。这使我们更容易帮助你。 –
我预计这些值是\ x52 \ x50 \ x43 \ x46而不是RPCF,例如 - 所有字节格式相同。 增加了我使用返回值的信息。 –
这些值实际上是相同的。你只是看到python如何显示字符串与字节的工件。 –