PyQt5保存QByteArray为json格式
PyQt5 save QByteArray to json format
这是泡菜。我正在尝试将我的 window/other 元素保存为 json 格式,以便我可以将多个数据存储在 1 个位置以供我的 window/etc
我知道 QByteArray 有这些功能:
std::string QByteArray::toStdString() 常量
和
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 > 到几何或其他方法 ?
谢谢!
JSON 无法序列化 bytes/bytearray
对象,因此您需要将它们转换为 unicode 对象。这意味着有必要以某种方式 "decode" 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
这是泡菜。我正在尝试将我的 window/other 元素保存为 json 格式,以便我可以将多个数据存储在 1 个位置以供我的 window/etc
我知道 QByteArray 有这些功能: std::string QByteArray::toStdString() 常量 和 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 > 到几何或其他方法 ?
谢谢!
JSON 无法序列化 bytes/bytearray
对象,因此您需要将它们转换为 unicode 对象。这意味着有必要以某种方式 "decode" 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