Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/356.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-apps-script/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python _winreg.QueryValuex返回“;混合型;二进制值_Python_Python 3.x_Registry_Winreg - Fatal编程技术网

Python _winreg.QueryValuex返回“;混合型;二进制值

Python _winreg.QueryValuex返回“;混合型;二进制值,python,python-3.x,registry,winreg,Python,Python 3.x,Registry,Winreg,在Python3.4下,我使用winreg.QueryValueEx()从注册表中获取键值,以便将其与文本文件进行比较。 我遇到了一个问题,REG\u二进制键值是字节,但其中有unicode值: 预期注册表项值-52 50 43 46 01 1b 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…(粗体显示了一些有问

在Python3.4下,我使用
winreg.QueryValueEx()
从注册表中获取键值,以便将其与文本文件进行比较。 我遇到了一个问题,
REG\u二进制
键值是
字节
,但其中有unicode值:

  • 预期注册表项值-52 50 43 46 01 1b 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\u val.decode('utf-8')
    返回
    {UnicodeDecodeError}'utf-8'编解码器无法解码位置9的字节0xff:无效的开始字节
我将返回值(十六进制值的列表)用于保存预期十六进制值的文本文件。这些粗体的值是不需要的,因为它们不是十六进制格式的,我也不知道这些值是否都是预先准备好的,以便专门处理它们

在Python2.7中,没有任何问题。我猜这与Python3将
str
bytes
分开有关,甚至与Python3中winreg中的一个bug有关

如果您能提供任何帮助和提示,以便将其统一为单一类型,我们将不胜感激。
谢谢

看起来注册表中的数据甚至不是unicode。 你甚至需要把它解码成unicode码吗

为什么不将数据存储在二进制文件中

bytes_data = winreg.QueryValueEx(your_key)
with open("filename.txt", "wb") as stream:
    stream.write(bytes_data)

看起来注册表中的数据甚至不是unicode。 你甚至需要把它解码成unicode码吗

为什么不将数据存储在二进制文件中

bytes_data = winreg.QueryValueEx(your_key)
with open("filename.txt", "wb") as stream:
    stream.write(bytes_data)

为什么你认为粗大的价值观是有问题的?您试图如何处理失败的返回值?您可以学习并创建一个示例。这使我们更容易帮助您。我希望这些值是\x52\x50\x43\x46,而不是RPCF,例如,所有字节的格式都相同。添加了使用返回值的信息。这些值实际上是相同的。您只是看到了Python如何显示字符串与字节的工件。为什么您认为粗大的值有问题?您试图如何处理失败的返回值?您可以学习并创建一个示例。这使我们更容易帮助您。我希望这些值是\x52\x50\x43\x46,而不是RPCF,例如,所有字节的格式都相同。添加了使用返回值的信息。这些值实际上是相同的。您只是看到了python如何显示字符串和字节的人工制品。谢谢Nir!我只是将读取的字节数组与从引用中读取的字节数组进行了比较,不需要解码\编码!:)谢谢你!我只是将读取的字节数组与从引用中读取的字节数组进行了比较,不需要解码\编码!:)