这是一个泡菜。我正在尝试将我的窗口/其他元素保存为json格式,以便我可以将多个数据存储在我的窗口/等的一个位置
我知道QByteArray具有以下功能: std :: string QByteArray :: toStdString()const 和 QByteArray QByteArray :: fromStdString(const 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转换为bytearray然后我可以保存为字符串,但我正在
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>几何或其他方法?
谢谢!
答案 0 :(得分:6)
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