2017-05-30 202 views
0

这是一个泡菜。我试图将我的窗口/其他元素保存为json格式,以便我可以在一个位置为我的窗口存储多个数据/ etcPyQt5将QByteArray保存为json格式

我知道QByteArray具有以下功能: std :: string QByteArray :: toStdString()const的 和 的QByteArray的QByteArray :: fromStdString(常量的std :: string & STR)

这应该允许我这样做,但到目前为止,我不能让它在Python工作。 关于我的一些信息在这里找到(C)> Correct way to losslessly convert to and from std::string and QByteArray

我试图做这样的事情:

print(self.saveGeometry()) 
bar = self.saveGeometry() 
print(bytes(str(bar).encode())) 

转换的QByteArray字节组到那个然后我可以保存为字符串,但我越来越

UnicodeDecodeError: 'utf-8' codec can't decode byte 0xd9 in position 1: invalid continuation byte 

可以any1建议如何使用本机QT5 5.4+函数来保存QByteArray到QByteArray.toStdString到json然后加载json>到QByteArray.fromStdString>到几何或其他方法?

谢谢!

回答

2

JSON无法序列化bytes/bytearray对象,因此您需要将它们转换为unicode对象。这意味着有必要对包含在QByteArray中的原始字节数据进行“解码”。一种方法是先将字节转换为某种ASCII兼容格式,以避免任何Unicode错误:

>>> g = widget.saveGeometry() 
>>> d = json.dumps(bytes(g.toHex()).decode('ascii')) 
>>> x = QByteArray.fromHex(bytes(json.loads(d), 'ascii')) 
>>> x == g 
True 
+0

非常感谢!我甚至得到了Hex(),但无法实现它,非常感谢你的答案! – Dariusz