【问题标题】:PyQt5 save QByteArray to json formatPyQt5 将 QByteArray 保存为 json 格式
【发布时间】:2017-10-30 15:07:26
【问题描述】:

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

我知道 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 转换为字节数组,然后我可以将其保存为字符串,但我得到了

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 > 到几何或其他方法?

谢谢!

【问题讨论】:

    标签: python json pyqt pyqt5 qbytearray


    【解决方案1】:

    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
    

    【讨论】:

    • 非常感谢!我已经到了 toHex(),但无法让它工作,非常感谢你的回答!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-10-05
    • 2020-04-14
    • 2016-01-11
    • 1970-01-01
    • 2022-11-24
    • 2016-07-07
    • 1970-01-01
    相关资源
    最近更新 更多